SQL Server 嵌套报告结构/分层



我有这样的表格

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

我想要一个递归查询来查找单列中的所有报告 ID。

例如,对于 id 5,输出应始终为 null

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

关于 SQL 小提琴的示例。

像这样说:

测试数据

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

最新更新