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 를 선언해 변수에 값을 담았다.
결과는 위와 같다.