0

我有一个包含以下字段的表格


用户 ID 用户 报告用户 ID


 1   Vinoth          Null
 2   Kumar            1
 3   Raja             1
 4   Ragu             2
 5   Vignesh          2
 6   Yoga             3
 7   Yogesh           2
 8   Eswar            4
 9   Esakki           3
 .   ...              .

. ......

如果我将 UserID 设为 1,则查询将显示向他报告的所有用户

如果我将 USeRID 设为 1

然后结果将是


用户 ID 用户 报告用户 ID


 2   Kumar            1
 3   Raja             1
 4   Ragu             2
 5   Vignesh          2
 6   Yoga             3
 7   Yogesh           2
 8   Eswar            4
 9   Esakki           3
 .   ...              .

. ......

4

1 回答 1

1

看看使用递归CTE

可以将公用表表达式 (CTE) 视为在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句的执行范围内定义的临时结果集。CTE 类似于派生表,因为它不存储为对象,并且仅在查询期间持续存在。与派生表不同,CTE 可以是自引用的,并且可以在同一查询中多次引用。

就像是

DECLARE @Table TABLE(
UserID INT, 
UserName VARCHAR(20),
ReportingUserID INT
)


INSERT INTO @Table VALUES
(1,'Vinoth',Null),
(2,'Kumar',1),
(3,'Raja',1),
(4,'Ragu',2),
(5,'Vignesh',2),
(6,'Yoga',3),
(7,'Yogesh',2),
(8,'Eswar',4),
(9,'Esakki',3)

DECLARE @UserID INT = 1

;WITH ReportingUsers AS (
        SELECT  *
        FROM    @Table
        WHERE   ReportingUserID = @UserID
        UNION ALL
        SELECT  t.*
        FROM    @Table t INNER JOIN
                ReportingUsers ru   ON  ru.UserID = t.ReportingUserID
)
SELECT  *
FROM    ReportingUsers
于 2013-08-13T12:22:25.827 回答