Sql server 2005 使用CTE递归SQL Server 2005访问其他节点信息
背景表格数据:Sql server 2005 使用CTE递归SQL Server 2005访问其他节点信息,sql-server-2005,recursion,timeout,common-table-expression,Sql Server 2005,Recursion,Timeout,Common Table Expression,背景表格数据: memberid sponsorid mailfirstname maillastname 1000 NULL Foo Chu 1001 1000 Foo1 Chu1 1002 1001 Foo2 Chu2 1003 1002 Foo3 Chu3 1004 1003 Foo4 Chu4 下面的脚本打
memberid sponsorid mailfirstname maillastname
1000 NULL Foo Chu
1001 1000 Foo1 Chu1
1002 1001 Foo2 Chu2
1003 1002 Foo3 Chu3
1004 1003 Foo4 Chu4
下面的脚本打印出我当前所在的成员。但我同时还想打印该成员的赞助商信息。因此,目前我得到:
Level memberid sponsorid mailfirstname maillastname
0 1000 NULL Foo Chu
...
2 1004 1003 Foo4 Chu4
但对于1004会员,我也希望他们的赞助商:
Level memberid sponsorid mailfirstname maillastname sponsorfname sponsorlname
2 1004 1003 Foo4 Chu4 Foo3 Chu3
查询:
WITH Heirarchy
AS
(
SELECT
CONVERT( INT , 0 ) [Level],
T1.memberid,
T1.sponsorid,
T1.mailfirstname,
T1.maillastname
FROM
members T1
WHERE
T1.memberid = 20000283
UNION ALL
SELECT
CONVERT( INT , ( TH.[Level] + 1 ) ) [Level],
T1.memberid,
T1.sponsorid,
T1.mailfirstname,
T1.maillastname
FROM
members T1
INNER JOIN
Heirarchy TH ON TH.memberid = T1.sponsorid
)
SELECT *
FROM Heirarchy
ORDER BY level, maillastname
它应该对你有帮助
在下面的脚本中,我检索所有成员及其赞助商
WITH Heirarchy
AS
(
SELECT
0 AS [Level],
T1.memberid,
T1.sponsorid,
T1.mailfirstname,
T1.maillastname,
T1.mailfirstname AS sponsorfname,
T1.maillastname AS sponsorlname
FROM
members T1
WHERE
T1.sponsorid IS NULL
UNION ALL
SELECT
TH.[Level] + 1 AS [Level],
T1.memberid,
T1.sponsorid,
T1.mailfirstname,
T1.maillastname,
TH.mailfirstname,
TH.maillastname
FROM
members T1
INNER JOIN
Heirarchy TH ON TH.memberid = T1.sponsorid
)
SELECT *
FROM Heirarchy
ORDER BY level, maillastname
演示这是一个层次结构
(而不是继承权
)…您将“赞助商”信息存储在哪里?您只需要连接到该特定表,然后选择要在查询结果中显示的列