[英]How do you create a cumulative, “derived” column of ancestry using SQL Server 2008 hierarchyid
想象一下您的典型經理/員工層次結構,其中您的員工中有老板,而老板又有老板,而老板又有老板。
您將如何編寫一個查詢,該查詢的列將以所有老板的名字作為varchar。
給定此數據(省去了architectureid列,但此處的id列實質上描述了該列):
id | name | bossid
1 | BigBoss | 0
2 | CTO | 1
3 | CTO Lackey | 2
4 | CIO | 1
5 | CIO Lackey | 4
最后得到這個結果集:
id | name | all boss names
1 | BigBoss |
2 | CTO |Big Boss
3 | CTO Lackey |Big Boss, CTO
4 | CIO |Big Boss
5 | CIO Lackey |Big Boss, CIO
謝謝!
由於您使用的是SQL 2008:
;WITH CTE_Tree AS
(
SELECT
id,
name,
'' AS boss_names
FROM
My_Table
WHERE
boss_id IS NULL
UNION ALL
SELECT
T.id,
T.name,
CTE.boss_names + ', ' + CTE.name
FROM
CTE_Tree CTE
INNER JOIN My_Table T ON
T.boss_id = CTE.id
)
SELECT
id,
name,
boss_names
FROM
CTE_Tree
這不在我的腦海中,因此您可能需要對其進行調整。 boss_names的開頭將帶有一個逗號。 您可以在最終查詢中將其刪除,也可以在CTE中檢查CTE.boss_names來決定是否在逗號前加上逗號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.