sql - 如何在 Microsoft SQL 中将一列中的字符串汇总为一行?分组依据不起作用,因为它是 MSSQL

标签 sql sql-server database

例如我们有一个三列的表

Column A |  Column B | Column C
-------------------------------
P1       |    10     |    A    
P1       |    20     |    B
P1       |    30     |    C
P2       |    30     |    D
P2       |    40     |    E

我要如何在 Microsoft SQL 中编写 SELECT 查询才能得到这种结果

Column A |     Column B      |   Column C
------------------------------------------
P1       |    10, 20, 30     |    A, B, C
P2       |    30, 40         |    D, E

最佳答案

试试这个

CREATE TABLE #temp(ColumnA VARCHAR(10),ColumnB INT ,ColumnC VARCHAR(10))
--insert rows

SELECT t.[ColumnA] ,
         [ColumnB] = STUFF((SELECT  ','+cast([ColumnB] AS VARCHAR ) FROM  #Temp WHERE  [ColumnA]  = t.[ColumnA]  FOR XML PATH('')),1,1,''),
         [ColumnC] = STUFF((SELECT  ','+[ColumnC] FROM #Temp WHERE [ColumnA] = t.[ColumnA] FOR XML PATH('')),1,1,'')
FROM #Temp t
GROUP BY t.[ColumnA]

我测试一下

result

关于sql - 如何在 Microsoft SQL 中将一列中的字符串汇总为一行?分组依据不起作用,因为它是 MSSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47689303/

相关文章:

mysql - 从表中复制字段以在另一个表的查询中使用

mysql - 在 key 更新时选择最大合并?

sql - 如何在一个查询中进行选择和更新?

sql - 分布式连接两个表

sql - 有没有办法缩短这个查询?

SQL 查询 : self join on subquery necessitates creating a separate (non-temporary) table?

sql-server - Azure SQL Blob 存储选择

mysql - 仅包含唯一字符串的专用 SQL 表

database - 包含对记录/数据所有权的访问的简单数据库结构

java - 通过调用 Java 方法为 H2 数据库中的新行生成默认值