SQL:将字符串聚合在一起

时间:2011-03-27 21:46:10

标签: sql sql-server-2005

在我的SQL Server 2005数据库中,使用SLQ查询,是否有人知道将记录分组到一个字段的最佳方法,并从另一个字段获取逗号分隔的值列表?
如果我有:

UserID        Code
  1            A
  1            C5
  1            X
  2            V3
  3            B
  3            D
  3            NULL
  3            F4
  4            NULL

我会得到:

 UserID        Code
  1            A,C5,X
  2            V3
  3            B,D,F4
  4            NULL

感谢您的帮助。

2 个答案:

答案 0 :(得分:17)

WITH Data AS (
    SELECT 1 UserId, 'A' Code 
    UNION ALL 
    SELECT 1, 'C5'
    UNION ALL 
    SELECT 1, 'X'
    UNION ALL 
    SELECT 2, 'V3'
    UNION ALL 
    SELECT 3, 'B'
    UNION ALL 
    SELECT 3, 'D'
    UNION ALL 
    SELECT 3, NULL
    UNION ALL 
    SELECT 3, 'F4'
    UNION ALL 
    SELECT 4, NULL
)
SELECT U.UserId, STUFF((
    SELECT ','+Code FROM Data WHERE Data.UserID = U.UserID FOR XML PATH('')
), 1, 1, '') Code 
FROM (SELECT DISTINCT UserID FROM Data) U

只需用您的表名替换Data CTE即可。

答案 1 :(得分:2)