2012-04-18 31 views

回答

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