2011-03-27 92 views
13

在我的SQL Server 2005数据库中,使用SLQ查询,是否有人知道通过一个字段将记录组合​​在一起的最佳方式,并从另一个字段获取逗号分隔的值列表?
所以,如果我有:SQL:将字符串聚合在一起

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 

感谢您的帮助。

+0

可能重复[如何使用GROUP BY来连接字符串中的SQL Server?(http://stackoverflow.com/questions/273238/how-to-use-group-by-to-concatenate-strings-in-sql-server) – Dar 2015-08-06 08:13:42

回答

16
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即可。

+0

+1这样看起来好一点。 – 2011-03-27 22:14:41

+1

-1不符合输出(这会导致ACM编程竞赛问题失败)。输出有','不是','作为分隔符 – RichardTheKiwi 2011-03-27 22:55:31

+0

@Richard,我希望你对此有些满意......不管怎样,我修好了,谢谢你的提示。 – Lucero 2011-03-27 23:11:16