如何连接每个组的特定列的所有字符串

yon*_*236 21 sql t-sql sql-server xquery sql-server-group-concat

假设我有这个表[表1]

Name    Mark
------- ------
ABC     10
DEF     10
GHI     10
JKL     20
MNO     20
PQR     30
Run Code Online (Sandbox Code Playgroud)

我的SQL语句应该是什么来检索看起来像这样的记录:( group by [mark]).我已经完成了1和2列,但不知道如何完成第3列(使用相同的[mark]连接[name])

mark count     names
---- -----     -----------
10       3     ABC,DEF,GHI
20       2     JKL,MNO
30       1     PQR
Run Code Online (Sandbox Code Playgroud)

我正在使用Microsoft SQL.请帮忙.谢谢

Kir*_*huk 35

如果是MS SQL 2005或更高版本.

declare @t table([name] varchar(max), mark int)

insert @t values ('ABC', 10), ('DEF', 10), ('GHI', 10),
    ('JKL', 20), ('MNO', 20), ('PQR', 30)


select t.mark, COUNT(*) [count]
    ,STUFF((
        select ',' + [name]
        from @t t1
        where t1.mark = t.mark
        for xml path(''), type
    ).value('.', 'varchar(max)'), 1, 1, '') [values]
from @t t
group by t.mark
Run Code Online (Sandbox Code Playgroud)

输出:

mark        count       values
----------- ----------- --------------
10          3           ABC,DEF,GHI
20          2           JKL,MNO
30          1           PQR
Run Code Online (Sandbox Code Playgroud)

  • 你应该尝试使用像'Barns&Noble`这样的名字.它不漂亮.要解决这个问题,你可以这样做.http://stackoverflow.com/questions/6074321/sql-for-xml-path-list-and-count/6077206#6077206 (2认同)