【发布时间】:2014-07-11 08:49:02
【问题描述】:
我使用下表
-- USER TABLE --
User_ID | Manager_ID | Code
1 | null | ABC
2 | 1 | DEF
3 | 2 | HIJ
4 | null | ABC
我需要知道与每个用户相关的代码以及代码是否“拥有”。当代码在同一行时,相关代码由用户“拥有”
User_ID = 1:自有代码 = ABC
但我还需要通过层次结构 Manager_ID -> User_ID 了解每个用户的相关代码。此层次结构没有最大深度。
User_ID = 1:相关代码 = DEF(按 User_ID 2)和 HIJ(按 User_ID 3)
在我的示例中,我想得到以下结果
User_ID | Code | IsOwner
1 | ABC | 1
1 | DEF | 0
1 | HIJ | 0
2 | DEF | 1
2 | HIJ | 0
3 | HIJ | 1
4 | ABC | 1
对于拥有的代码,很简单,我做了以下查询:
SELECT User_ID, Code, 1 as IsOwner
FROM User
但我在层次结构方面遇到了一些问题。我试图在互联网上找到示例,但我只看到带有“级别”或“计数”的请求,我不知道如何检索所有相关代码。
我看到了 Common Table Expression 并尝试了类似的查询,但我认为我遗漏了一些东西......
USE MyBD
GO
WITH MyCTE (Manager_ID, User_ID, Code, IsOwned)
AS
(
SELECT Manager_ID, User_ID, Code, 1 as IsOwned
FROM User
WHERE Manager_ID IS NULL
UNION ALL
SELECT u.Manager_ID, u.User_ID, u.Code, 1 as IsOwned
FROM User AS u
INNER JOIN Managers AS d
ON u.Manager_ID = d.User_ID
)
SELECT Manager_ID, User_ID, Code, IsOwned
FROM Managers
GO
您能帮我获取每个用户及其所有权的所有相关代码吗?
【问题讨论】:
-
你有一个最大的层次深度,或者没有?
-
@RaphaëlAlthaus 不,我没有最大深度,我编辑我的帖子
标签: sql-server tsql recursion common-table-expression