MSSQL

[MSSQL] 여러 행을 한 줄로 나타내는 방법

bomoto 2021. 8. 2. 14:30

#temp 테이블

  name clor
1 apple red
2 banana yellow
3 peach pink
4 melon green

 

 

1. for xml path 사용

for xml path를 사용하면 결과가 xml태그로 나온다.

하지만 우린 xml태그는 필요 없기 때문에 3번째 줄처럼 select ','+name라고 써준다.

그러면 결과는 ,apple,banana,peach,melon 라고 나온다.

여기서 첫 번째 콤마는 필요 없기 때문에 이 콤마를 제거해준다.

substring이나 replace같은 방법도 있지만 STUFF를 사용해서 첫 번째 콤마만 제거해주었다.

SELECT
  STUFF((
    SELECT ',' + name
    FROM #temp
    WHERE 1=1
    FOR XML PATH('')
  ),1,1,'') AS fruits
  fruits
1 apple,banana,peach,melon

 

 

2. coalesce 사용

coalesce는 null값을 체크할 때 쓰는 함수인데 여러 행을 한 줄로 나타낼 때 쓸 수도 있다.

DECLARE @fruitsName VARCHAR(20)

SELECT @fruitsName = COALESCE(@fruitsName + ',' ,'')+name FROM #temp WHERE 1=1
SELECT @fruitsName AS fruits

이번엔 변수 @fruitsName 를 선언해 변수에 값을 담았다.

결과는 위와 같다.