2008-10-07 10 views
34

는 지금, 나는이 하나의 같은 SQL 쿼리가 :이처럼 모두 한 행에 결과를 반환하고 싶습니다SQL Server 2005에서 여러 행을 쉼표로 분리 된 목록에 결합하려면 어떻게합니까?

X Y 
---------- 
12 3 
15 2 
18 12 
20 29 

(적합 :

SELECT X, Y FROM POINTS 

너무 같은 결과를 반환 는 HTML < 지역에 > 태그)를 사용하는 :

XYLIST 
---------- 
12,3,15,2,18,12,20,29 

은 SQL을 사용하여이 할 수있는 방법이 있나요?

+0

응용 프로그램을 확장하려는 경우, 데이터베이스 외부에서 이런 종류의 일을하는 것이 낫습니다. 데이터베이스는 거의 항상 병목 현상이 될 것입니다. –

+0

좋은 대답이 왜 사라 졌는지 궁금합니다. –

+0

@Joseph Bui - 나를 믿어 라. 불행하게도 프로젝트 책임자는 내가 이런 식으로 주장한다. –

답변

22
DECLARE @XYList varchar(MAX) 
SET @XYList = '' 

SELECT @XYList = @XYList + CONVERT(varchar, X) + ',' + CONVERT(varchar, Y) + ',' 
FROM POINTS 

-- Remove last comma 
SELECT LEFT(@XYList, LEN(@XYList) - 1) 
최고의
+0

링크 된 서버에서 본인 또는이 서버가 작동하지 않습니까? 'SELECT @List = @List + CONVERT (varchar, ID) + ',' FROM LinkedServer.MyDatabase.dbo.MyTable'과 같은 것을 시도하면 항상 하나의 ID 만 반환됩니다. 'Select *'는 많은 ID를 반환합니다. – Martin

1
DECLARE @s VarChar(8000) 
SET @s = '' 

SELECT @s = @s + ',' + CAST(X AS VarChar) + ',' + CAST(Y AS VarChar) 
FROM POINTS 

SELECT @s 

그냥 신속하고 유용한 답변들에 대한 쉼표

+0

그래도 선행 쉼표는 없지만 ....... – rainabba

59

감사를 제거!

SELECT STUFF((SELECT ',' + X + ',' + Y 
       FROM Points 
       FOR 
       XML PATH('') 
      ), 1, 1, '') AS XYList 

신용이 남자로 이동 :

내가 너무이 작업을 수행하는 또 다른 빠른 방법을 발견

http://geekswithblogs.net/mnf/archive/2007/10/02/t-sql-user-defined-function-to-concatenate-column-to-csv-string.aspx

+0

나는이 솔루션이 가장 마음에 든다. 사용하기 쉽고 모든 SQL에 한 줄만 추가 할 수 있습니다. –

+0

신난다, 그것은 나를 위해 잘 작동했다 –

9

COALESCE 트릭을 사용하여, 당신에 대해 걱정할 필요가 없습니다 뒤에 오는 쉼표 :

DECLARE @XYList AS varchar(MAX) -- Leave as NULL 

SELECT @XYList = COALESCE(@XYList + ',', '') + CONVERT(varchar, X) + ',' + CONVERT(varchar, Y) 
FROM POINTS 
+0

이것은 다른 한편으로는 잘 작동한다! – rainabba