MS SQL上的字符串连接用于一组行

bre*_*vhb 1 t-sql sql-server pivot

可以说我有两张桌子:

1与用户和另一个用户记录哪些用户使用了什么代码.

Users
-----
Id, Name
1, 'John'
2, 'Doe'

Codes
------
Id, UserId, code
1, 1, 145
2, 1, 187
3, 2, 251

现在我想拉出一个导致他跟随的查询

Name, UsedCodes
'John', '145,187'
'Doe', '251'

如何使用查询或存储过程完成此操作?

Rob*_*nik 8

由于您没有指定数据库,我给您两个选项:

MySQL的

使用MySql,您应该只使用GROUP_CONCAT()聚合函数.

Microsoft SQL Server 2005+

显然,在MS DB上获得相同结果的最快方法(没有游标,没有合并......)就是使用FOR XML PATH('')它简单地省略了XML元素.

SELECT
    u.Name,
    c1.UserId,
    (
        SELECT c2.Code + ','
        FROM Codes c2
        WHERE c2.UserId = c1.UserId
        ORDER BY c2.code
        FOR XML PATH('')
    ) as Codes
FROM Codes c1
    JOIN Users u
    ON (u.Id = c1.UserId)
GROUP BY c1.UserId, u.Name
Run Code Online (Sandbox Code Playgroud)

其他选择

阅读这篇文章,它解释了实现这一目标的所有可能方法.