2012-04-18 14 views
1

私はこのSQL Serverのネストされた報告構造/階層

Id  Name  ReportingId 
== 
1  Stala  Null 
2  Coma  1 
3  Rita  1 
4  Rosy  2 
5  sss   4 

のようなテーブルを持っている私は、単一の列内のすべてのレポートのIDを見つけるために再帰クエリをしたいです。

例えば番号5の出力が常に

4 
2 
1 
null 

答えて

3

ヌルまでであるべきである。ここで再帰共通テーブル式(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 

Example on SQL Fiddle.

2

気にいらをこのように:

テストデータ

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 
関連する問題