이것은 당신이 추구하는 더 깨끗한 접근법 일 수 있습니다. 기본적으로 변수가 아직 초기화되었는지 확인하십시오. 그렇지 않은 경우 빈 문자열로 설정하고 첫 번째 도시 (앞에 쉼표 없음)를 추가하십시오. 있는 경우 쉼표를 추가 한 다음 도시를 추가하십시오.
DECLARE @col nvarchar(MAX);
SELECT @col = COALESCE(@col + ',', '') + city
FROM dbo.tbl WHERE state = 'California';
물론 상태마다 변수를 채우는 경우에만 작동합니다. 한 번에 하나씩 각 상태의 목록을 가져 오는 경우 한 번에 더 나은 솔루션이 있습니다.
SELECT [state], cities = STUFF((
SELECT N', ' + city FROM dbo.tbl
WHERE [state] = x.[state]
FOR XML PATH(''), TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 2, N'')
FROM dbo.tbl AS x
GROUP BY [state]
ORDER BY [state];
결과 :
state cities
---------- --------------------------------------
California San Francisco, Los Angeles, Sacramento
Florida Miami, Jacksonville
각 주 내에서 도시 이름으로 주문하려면 :
SELECT [state], cities = STUFF((
SELECT N', ' + city FROM dbo.tbl
WHERE [state] = x.[state]
ORDER BY city
FOR XML PATH(''), TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 2, N'')
FROM dbo.tbl AS x
GROUP BY [state]
ORDER BY [state];
Azure SQL Database 또는 SQL Server 2017+ 에서 새로운 STRING_AGG()
기능을 사용할 수 있습니다 .
SELECT [state], cities = STRING_AGG(city, N', ')
FROM dbo.tbl
GROUP BY [state]
ORDER BY [state];
그리고 도시 이름으로 주문 :
SELECT [state], cities = STRING_AGG(city, N', ')
WITHIN GROUP (ORDER BY city)
FROM dbo.tbl
GROUP BY [state]
ORDER BY [state];