【问题标题】:How to join values in one column? (SQL Server 2008R2)如何在一列中加入值? (SQL Server 2008R2)
【发布时间】:2018-12-18 01:57:52
【问题描述】:

我不知道如何在标题中简短地描述我的问题,但我希望有人能理解并尝试帮助我:)

就我而言,我有 2 个要加入的表:

SELECT t1.Name, t1.Group
FROM tblOne AS t1
UNION
SELECT t2.Name, t2.Group
FROM tblTwo AS t2

结果:

=====================
Name     |     Group
=====================
Miller   |     TST
Miller   |     DEV
Johnson  |     TST
White    |     TST
Lopez    |     DEV
Brown    |     TST
Jackson  |     DEV
Jackson  |     TST

目标:

Name     |     Group
=====================
Miller   |     DEV, TST
Johnson  |     TST
White    |     TST
Lopez    |     DEV
Brown    |     TST
Jackson  |     DEV, TST

有人有想法吗? 提前感谢您的任何提示。

【问题讨论】:

标签: sql sql-server sql-server-2008-r2 aggregation


【解决方案1】:

您可以使用非常简单的xml 方法和stuff() 函数:

select t1.name, stuff((select distinct ','+t2.[group] 
                       from table2 t2
                       where t2.name = t1.name
                       for xml path('')
                       ), 1, 1, ''
                     ) as [group]
from table1 t1 
group by name;

【讨论】:

    【解决方案2】:

    可以使用FOR XML,但如果您的数据与样本中的数据一样,那么您也可以进行更简单的查询,例如:

    SELECT 
        ISNULL(t1.[Name], t2.[Name]) AS [Name],
        ISNULL(t1.[Group] + CASE WHEN t2.[Group] IS NOT NULL THEN ',' ELSE '' END, '') 
            + ISNULL(t2.[Group], '') AS [Group]
    FROM 
        tblOne AS t1
        FULL OUTER JOIN tblTwo AS t2 ON t2.[Name] = t1.[Name];
    

    这假设每个“名称”都存在:

    • 仅在 tblOne 中;
    • 仅在 tblTwo 中;
    • 在 tblOne 和 tblTwo 中只有一次。

    如果上述逻辑不正确,那么您将需要 XML 版本。

    另外,我只想说,使用保留名称如 [Name][Group] 作为列名可能是个坏主意(特别是 [Group]!)?

    【讨论】:

      【解决方案3】:

      我相信你需要:

      with t as (
            select t1.Name, Group as grp
            from tblOne
            union
            select t2.Name, Group as grp
            from tblTwo t2
           )
      select name,
             stuff( (select ',' + grp
                     from t t2
                     where t2.name = t.name
                     for xml path ('')
                    ), 1, 1, ''
                  ) as groups
      from (select distinct name from t) t;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-19
        • 1970-01-01
        • 2013-01-16
        • 1970-01-01
        • 2014-05-29
        相关资源
        最近更新 更多