Sql server 分组方式,用于将数据分组为字符串格式

Sql server 分组方式,用于将数据分组为字符串格式,sql-server,tsql,group-by,sql,Sql Server,Tsql,Group By,Sql,我有一个表,其中包含下面给出的一些数据。它使用树状结构 i、 e 我想代表部门对我的记录进行分组,然后是直属家长,然后是首选项,每个首选项之间用“,”分隔 i、 e 在实际场景中,所有这些都是我的ID,将由它们的字符串字段替换 我使用的是SQL server 2k5,您可以在子查询中使用FOR XML PATH来获取逗号分隔的值列表。然后按键字段分组,以获得正确的值 第一个问题 SELECT [Department_Id], STUFF( ( SELE

我有一个表,其中包含下面给出的一些数据。它使用树状结构

i、 e


我想代表部门对我的记录进行分组,然后是直属家长,然后是首选项,每个首选项之间用“,”分隔

i、 e


在实际场景中,所有这些都是我的ID,将由它们的字符串字段替换


我使用的是SQL server 2k5,您可以在子查询中使用FOR XML PATH来获取逗号分隔的值列表。然后按键字段分组,以获得正确的值

第一个问题

SELECT
    [Department_Id],
    STUFF(
    (
        SELECT
            ',' + CONVERT(varchar(10), [ImediateParent])
        FROM
            [YourTable] [YourTable2]
        WHERE
            [YourTable2].[Department_Id] = [YourTable].[Department_Id]
        FOR XML PATH('')
    ), 1, 1, ''),
    STUFF(
    (
        SELECT
            ',' + CONVERT(varchar(10), [Preferences])
        FROM
            [YourTable] [YourTable2]
        WHERE
            [YourTable2].[Department_Id] = [YourTable].[Department_Id]
        FOR XML PATH('')
    ), 1, 1, '')
FROM
    [YourTable]
GROUP BY
    [YourTable].[Department_Id]
至于你的第二个问题

SELECT
    [ImediateParent],
    STUFF(
    (
        SELECT
            ',' + CONVERT(varchar(10), [Preferences])
        FROM
            [YourTable] [YourTable2]
        WHERE
            [YourTable2].[ImediateParent] = [YourTable].[ImediateParent]
        FOR XML PATH('')
    ), 1, 1, '')
FROM
    [YourTable]
GROUP BY
    [YourTable].[ImediateParent]
department  Immediate Parent  preferences
1             5,6                 14,15,16
2             4,3,20,13           9,4,24,25,23

and this table also
Immediate parent  preferences
5                     14,15
6                     16
4                     9
3                     4
20                    24,25
13                    13
SELECT
    [Department_Id],
    STUFF(
    (
        SELECT
            ',' + CONVERT(varchar(10), [ImediateParent])
        FROM
            [YourTable] [YourTable2]
        WHERE
            [YourTable2].[Department_Id] = [YourTable].[Department_Id]
        FOR XML PATH('')
    ), 1, 1, ''),
    STUFF(
    (
        SELECT
            ',' + CONVERT(varchar(10), [Preferences])
        FROM
            [YourTable] [YourTable2]
        WHERE
            [YourTable2].[Department_Id] = [YourTable].[Department_Id]
        FOR XML PATH('')
    ), 1, 1, '')
FROM
    [YourTable]
GROUP BY
    [YourTable].[Department_Id]
SELECT
    [ImediateParent],
    STUFF(
    (
        SELECT
            ',' + CONVERT(varchar(10), [Preferences])
        FROM
            [YourTable] [YourTable2]
        WHERE
            [YourTable2].[ImediateParent] = [YourTable].[ImediateParent]
        FOR XML PATH('')
    ), 1, 1, '')
FROM
    [YourTable]
GROUP BY
    [YourTable].[ImediateParent]