簡體   English   中英

如何使用SQL Server 2008的層次結構ID創建祖先的累積“派生”列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM