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

가능한 중복 [SQL 서버에서 문자열을 연결하는 GROUP BY를 사용하는 방법?] (http://stackoverflow.com/questions/273238/how-to-use-group-by-concatenate-strings-in-sql-server) – Dar

답변

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이 순간이 더 좋아 보입니다. –

+1

-1 출력을 유지하지 않는 경우 (ACM 프로그래밍 경연 대회 질문에 실패합니다). 출력에는 ','이 아닌 ','가 구분 기호로 사용됩니다. – RichardTheKiwi

+0

@ 리차드, 당신이 그것에 만족할 수 있기를 바랍니다 ... 어쨌든, 힌트를 주셔서 고맙습니다. – Lucero