【问题标题】:STUFF FOR XML PATH - combine multiple rows into a single column cellSTUFF FOR XML PATH - 将多行组合成一个单列单元格
【发布时间】:2021-09-02 12:44:25
【问题描述】:

假设我的表格中有如下所示的数据

   Num1        Type1        Type2       Acct        Ind
   ---         ----         ----        ---         ---
   1X2         XXX          CA          111         ERROR
   1X2         XXX          CA          222         ERROR

   X22         XXX          CA          111         ERROR
   X22         XXX          CA          222         ERROR
   X22         XXX          CA          333         ERROR
   X22         XXX          CA          444         ERROR

我想要实现的是添加一个新列,最终实现如下:

   Num1        Type1        Type2       Acct        Ind         Acct_List
   ---         ----         ----        ---         ---         --------
   1X2         XXX          CA          111         ERROR       111,222
   1X2         XXX          CA          222         ERROR       111,222

   X22         XXX          CA          111         ERROR       111,222,333,444
   X22         XXX          CA          222         ERROR       111,222,333,444
   X22         XXX          CA          333         ERROR       111,222,333,444
   X22         XXX          CA          444         ERROR       111,222,333,444

我试图做这样的事情:

    SELECT Num1, Type1, Type2, Acct, Ind, 'Acct_List' = STUFF((SELECT ', ' + CAST(ACCT AS VARCHAR(55)) FROM Table FOR XML PATH (''),1,1,'')
    FROM Table
    WHERE IND='ERROR'
    GROUP BY Num1, Type1, Type2, IND

但是,使用此代码的情况是,每一行都返回 ACCT_LIST 中的所有 ACCT

有什么方法可以让它看起来像结果数据?

【问题讨论】:

  • 在提出问题时,您需要提供minimal reproducible example:(1) DDL 和样本数据填充,即 CREATE 表加上 INSERT、T-SQL 语句。 (2) 你需要做什么,即逻辑,以及你在 T-SQL 中尝试实现它。 (3) 基于上述#1 中的样本数据的期望输出。 (4) 你的 SQL Server 版本 (SELECT @@version;)

标签: sql sql-server ssms stuff


【解决方案1】:

你缺少 where 子句:

SELECT Num1, Type1, Type2, Acct, Ind, 'Acct_List' = STUFF((SELECT ', ' + CAST(ACCT AS VARCHAR(55)) FROM Table t1 WHERE t1.Num1 = t2.Num1 FOR XML PATH (''),1,1,'')
FROM Table t2
WHERE IND='ERROR'
GROUP BY Num1, Type1, Type2, IND

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-09
    • 2021-05-19
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    相关资源
    最近更新 更多