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

The*_*arp 2 sql database sql-server

例如我们有一个包含三列的表

Column A |  Column B | Column C
-------------------------------
P1       |    10     |    A    
P1       |    20     |    B
P1       |    30     |    C
P2       |    30     |    D
P2       |    40     |    E
Run Code Online (Sandbox Code Playgroud)

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

Column A |     Column B      |   Column C
------------------------------------------
P1       |    10, 20, 30     |    A, B, C
P2       |    30, 40         |    D, E
Run Code Online (Sandbox Code Playgroud)

Era*_*per 5

如果您运行的是 SQL Server 2017,向 SQL 开发人员引入的 T-SQL 增强功能包括STRING_AGG 字符串连接函数

您可以简单地使用以下 SELECT 语句将不同行中的字符串值聚合到单个列值中

select
    ColumnA,
    string_agg(ColumnB,',') ColumnB,
    string_agg(ColumnC,',') ColumnC
from TestTable1
group by ColumnA
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述