1
Id Name ReportingId
==
1 Stala Null
2 Coma 1
3 Rita 1
4 Rosy 2
5 sss 4
のようなテーブルを持っている私は、単一の列内のすべてのレポートのIDを見つけるために再帰クエリをしたいです。
例えば番号5の出力が常に
4
2
1
null
Id Name ReportingId
==
1 Stala Null
2 Coma 1
3 Rita 1
4 Rosy 2
5 sss 4
のようなテーブルを持っている私は、単一の列内のすべてのレポートのIDを見つけるために再帰クエリをしたいです。
例えば番号5の出力が常に
4
2
1
null
ヌルまでであるべきである。ここで再帰共通テーブル式(CTE)を使用して例を示します。
; with cte as
(
select ReportingID
from YourTable
where id = 5
union all
select yt.ReportingID
from YourTable yt
join cte
on cte.ReportingID = yt.id
)
select *
from cte
気にいらをこのように:
テストデータ
DECLARE @T TABLE(Id int,Name VARCHAR(5),ReportingId INT)
INSERT INTO @T
VALUES
(1,'Stala',Null),
(2,'Coma',1),
(3,'Rita',1),
(4,'Rosy',2),
(5,'sss',4)
クエリ
;WITH CTE
AS
(
SELECT
NULL AS Id,
t.ReportingId
FROM
@T AS t
WHERE
t.Id=5
UNION ALL
SELECT
t.Id,
t.ReportingId
FROM
@T AS t
JOIN CTE
ON t.Id=CTE.ReportingId
)
SELECT
CTE.Id
FROM
CTE
結果
NULL
4
2
1