2013-03-22 2 views
7

아래 코드는 여러 필드를 쉼표로 구분하여 병합하는 작업을 잘 수행합니다 (here에서 가져옴).캐리지 리턴 줄 바꿈을 사용하여 여러 행을 하나의 열로 병합

select player, 
    stuff((SELECT distinct ', ' + cast(score as varchar(10)) 
     FROM yourtable t2 
     where t2.player = t1.player 
     FOR XML PATH('')),1,1,'') 
from yourtable t1 
group by player 

캐리지 리턴 라인 피드로 쉼표를 교체해야합니다. 아래 코드를 시도했지만이 문자로 항목을 구분하기 시작했습니다 : "# x0D;"

select player, 
    stuff((SELECT distinct CHAR(13)+CHAR(10) + cast(score as varchar(10)) 
     FROM yourtable t2 
     where t2.player = t1.player 
     FOR XML PATH('')),1,1,'') 
from yourtable t1 
group by player 

나는 문제가 함께 의심의 "XML PATH ('')에 대한), 1,1 ','"하지만 난 넣어 값 모르겠어요.

도움을 주시면 감사하겠습니다.

감사합니다.

답변

8

실제로 STUFF의 결과에서 쉼표를 바꿀 수 있습니다.

이 시도 :

select player, 
    replace(stuff((SELECT distinct ', ' + cast(score as varchar(10)) 
     FROM yourtable t2 
     where t2.player = t1.player 
     FOR XML PATH('')),1,1,''), ',', char(13) + char(10)) 
from yourtable t1 
group by player 
+0

그것은했다! 감사! :) – Osprey

+0

쉼표 대신 새 줄을 만드는 방법은 어떻습니까? –

3

당신은 XML을 사용하여 (이 중 #x0D; 하나입니다) 추가 모든 특수 문자를 처리 할 수 ​​

FOR XML PATH(''), TYPE).value('.','nvarchar(max)') 

더 많은 정보 here합니다.

당신은 또한 당신이 (당신이 char(13)char(10)을 가지고 있기 때문에이이 경우에) 당신의 결과의 시작 부분에서 건너 뛸 필요가 문자 수에 STUFF의 세 번째 매개 변수를 조정해야합니다.

그래서 솔루션은 다음과 같습니다

select player, 
    stuff((SELECT distinct CHAR(13)+CHAR(10) + cast(score as varchar(10)) 
     FROM yourtable t2 
     where t2.player = t1.player 
     FOR XML PATH(''), TYPE).value('.','nvarchar(max)'),1,2,'') 
from yourtable t1 
group by player 
관련 문제