2011-03-27 29 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