연구개발/SQL2005

여러 로우의 값을 하나의 컬럼으로 바꾸는 방법

알 수 없는 사용자 2009. 5. 20. 19:47

CREATE TABLE test (GBN CHAR(1),VAL CHAR(3))
INSERT test VALUES('A','001')
INSERT test VALUES('A','002')
INSERT test VALUES('A','003')
INSERT test VALUES('A','004')
INSERT test VALUES('A','005')
INSERT test VALUES('A','011')
INSERT test VALUES('B','007')
INSERT test VALUES('B','004')
INSERT test VALUES('B','005')
INSERT test VALUES('B','010')
INSERT test VALUES('C','011')
INSERT test VALUES('C','001')
INSERT test VALUES('C','002')
INSERT test VALUES('C','003')

-------------------------------------------------------
SELECT DISTINCT GBN,
       STUFF((SELECT ',' + VAL AS [text()]
                FROM test b
               WHERE b.GBN = a.GBN
               ORDER BY VAL
                 FOR XML PATH('')),1,1,'') AS VAL
FROM test a

/*
GBN  VAL
---- -----------------------------
A    001,002,003,004,005,011
B    004,005,007,010
C    001,002,003,011