Sql Query查找报告用户详细信息

时间:2013-08-13 12:14:30

标签: sql sql-server linq-to-sql linq-to-entities

我有一个包含关注字段的表


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
 .   ...              .

。 ....

1 个答案:

答案 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