【问题标题】:SQL Server : concatenating values [duplicate]SQL Server:连接值[重复]
【发布时间】:2013-07-22 05:20:54
【问题描述】:

以下 SQL Server 查询需要帮助

select 
    JI.id, RBIEnvironment
from
   (select 
       issue,
       case when cfname='RBI-Environment' 
              then customvalue 
             else null 
       end as 'RBIEnvironment' 
    from X) as CT
where 
    CT.issue = JI.id
group by 
    JI.id, RBIEnvironment

问题是CT 表以以下格式返回数据

1   NULL
1   STG
1   PROD
2   SIT
2   DIT
3   SIT

因此外部查询返回

1   NULL
1   STG
1   PROD
2   SIT
2   DIT
3   SIT

我需要以下格式

1   STG,PROD
2   SIT,DIT
3   SIT

请使用相同的内部动态表,因为它包含更多需要在结果中显示的列。该内部表分别使用问题字段和 ID 字段与外部表链接

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    为此尝试STUFF() 函数:

    SELECT distinct ID, RBIEnvironment = 
        STUFF((SELECT ' , ' + RBIEnvironment
               FROM MyTable b 
               WHERE b.ID = a.ID
              FOR XML PATH('')), 1, 2, '')
    FROM MyTable a
    GROUP BY ID;
    

    输出:

    | ID | RBIENVIRONMENT |
    -----------------------
    |  1 |     STG , PROD |
    |  2 |      SIT , DIT |
    |  3 |            SIT |
    

    this SQLFiddle

    【讨论】:

    • 感谢您指出 SQLFiddle,它很棒
    • @hims056,我修改了你的小提琴,因为我的 slect 表是动态的,因此它失败了。
    • @Alfaromeo - 你能准确地展示你想要什么吗?
    • 谢谢,但我的要求是内部动态表是必需的,而这里它已经创建。如果我使用别名,会发生无效对象错误。
    • @Alfaromeo - 你能在this SQLFiddle中显示你的代码吗
    【解决方案2】:

    您可以使用STUFF..FOR XML 构造来连接列值。

    WITH CT AS 
    (
        select issue,
            case when cfname='RBI-Environment' 
                    then customvalue 
                 else null 
                 end as 'RBIEnvironment' 
        from X
    )
    SELECT issue, 
    STUFF((SELECT ', ' + b.RBIEnvironment 
           FROM CT b 
            WHERE a.issue = b.issue 
             FOR XML PATH('')),1,1,'')
    FROM CT a
    GROUP BY a.issue
    

    SQLFiddle DEMO - 简化为 CT CTE

    【讨论】:

      猜你喜欢
      • 2021-03-07
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 2012-01-29
      相关资源
      最近更新 更多