代码之家  ›  专栏  ›  技术社区  ›  marc esher

如何使用SQLServer2008HierarchyId创建祖先的累积“派生”列

  •  1
  • marc esher  · 技术社区  · 15 年前

    您将如何编写一个查询,其中包含一列,例如,所有boss的名字作为varchar。

    给定这些数据(省略hierarchyid列,但这里的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
    

    谢谢!

    1 回复  |  直到 15 年前
        1
  •  1
  •   Tom H zenazn    15 年前

    既然您使用的是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