본문 바로가기

MS-SQL

MSSQL 여러행을 한줄로 나타내기

여러행의 값을 한 행으로 만들어서 보여주고 싶을때가 있습니다.


Fruit

 Seq

Name

 1 

 딸기

 2

 바나나

 3

 사과

 4

 배


다음과 같은 결과를 얻으려면 어떻게 해야할까요?



FOR XML PATH


먼저 필요한건 FOR XML절입니다. FOR XML절은 쿼리 실행 결과를 XML형식으로 만들어줍니다. PATH는 FOR XML절에서 사용할 수 있는 네 가지 모드 중 하나라고만 알고계세요.


우리가 원하는건 XML태그는 아닙니다. 단지 FOR XML PATH의 방식만 사용할겁니다.

SELECT ','+ Name
FROM Fruit
FOR XML PATH('')

결과는 이렇습니다.


우리가 원하는 결과와 비슷하지만 맨 앞의 콤마(,)를 없애면 더 좋겠네요


이때 필요한 게 STUFF 함수입니다.

STUFF함수는 지정된 문자열의 시작위치와 크기를 지정하여 원하는 문자로 치환하는 함수입니다.


SELECT
    STUFF((
        SELECT ','+ Name
        FROM Fruit
        FOR XML PATH('')
    ), 1, 1, '') AS 과일이름

이렇게 하면 쿼리 결과의 맨 앞에 붙은 콤마(,)를 제거해 줍니다.