我有一个包含关注字段的表
UserID 用户名 ReportingUserID
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
然后结果将是
UserID 用户名 ReportingUserID
2 Kumar 1
3 Raja 1
4 Ragu 2
5 Vignesh 2
6 Yoga 3
7 Yogesh 2
8 Eswar 4
9 Esakki 3
. ... .
答案 0 :(得分:1)
请看一下使用递归CTE。
公用表表达式(CTE)可以被认为是临时表 在单个执行范围内定义的结果集 SELECT,INSERT,UPDATE,DELETE或CREATE VIEW语句。 CTE是 类似于派生表,因为它不存储为对象和 仅持续查询的持续时间。与派生表不同,a 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