2011-03-27 29 views
13

SQL Server 2005 veritabanımda, bir SLQ sorgusu kullanarak, bir alanla birlikte kayıtları gruplandırmanın en iyi yolunu bilen biri var mı, diğerinin değerlerinin virgülle ayrılmış bir listesini alıyor mu?
Ben Yani eğer:SQL: Toplama dizeleri birlikte

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

Ben almak istiyorum: Herhangi bir yardım için

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

teşekkürler.

+0

olası yinelenen [SQL Server dizeleri bitiştirmek için GROUP BY nasıl kullanılır?] (http://stackoverflow.com/questions/273238/nasıl kullanılır-grup-tarafından-birleştirme-dizeleri-sql-sunucu) – Dar

cevap

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'yi tablo adınızla değiştirin ve işiniz bitti. formların tam yorumu yapmak Orada it'sa

+0

+1 Evet, şu anda daha iyi görünüyor. –

+1

-1, çıkışa uymamak için (bu bir ACM programlama yarışması sorusu başarısız olabilir). Çıktısı ',' değil ',' sınırlayıcı olarak – RichardTheKiwi

+0

@Richard, umarım bunun için biraz memnuniyetiniz olur ... Her neyse, düzeltdim, ipucu için teşekkürler. – Lucero