본문 바로가기

프로그래밍/MSSQL

[MSSQL] 세로 데이터 가로로 출력 (데이터 한줄로 출력) STUFF, FOR XML PATH

반응형

 

 

여러 로우의 데이터를 한개의 로우 데이터로 출력해보자 (세로 데이터 가로 한줄로 출력)

 

 

 

STUFF , FOR XML PATH

SELECT STUFF((SELECT ',' + 컬럼명 FROM A FOR XML PATH ('')), 1, 1, '') AS '가로출력'
FROM 테이블명

 

 

 

 

예제

 

NAME
손꽁쥐
윤선생
황박사

 

위의 데이터를 아래와 같이 한줄로 출력하고자 한다

 

NAME
손꽁쥐, 윤선생, 황박사

 

WITH TABLE_A (NAME) AS (
    SELECT '손꽁쥐' UNION ALL
    SELECT '윤선생' UNION ALL
    SELECT '황박사'
)
SELECT TOP 1 STUFF((SELECT ',' + NAME FROM TABLE_A FOR XML PATH('')), 1, 1, '') AS '결과'
FROM TABLE_A

 

 

 

 

 

예제2

 

컬럼1을 기준으로 그룹으로 묶어서 컬럼1의 값이 동일한 컬럼2의 값들만 가로로 출력해보자.

 

CLASS NAME
A 손꽁쥐
B 윤선생
A 황박사

 

위와 같은 데이터가 있을때, 같은 CLASS끼리 학생들을 묶어서 출력해보자

 

WITH TABLE_A (CLASS, NAME) AS (
    SELECT 'A', '손꽁쥐' UNION ALL
    SELECT 'B', '윤선생' UNION ALL
    SELECT 'A', '황박사'
)
SELECT * FROM
(
    SELECT CLASS, STUFF((SELECT ',' + NAME FROM TABLE_A WHERE CLASS = A.CLASS FOR XML PATH('')), 1, 1, '') AS 'Result'
    FROM TABLE_A AS A
) A
GROUP BY A.CLASS, A.Result

 

원본 데이터

 

결과 데이터

 

 

 

[MSSQL] 문자열 치환함수 (REPLACE, STUFF)

 

 

반응형