2017-02-07 6 views
0

SQL Server 2005를 사용하고 있고 여러 행을 1 문자열로 연결하는 더 쉬운 방법을 찾고 싶습니다.문자열을 concat으로 1 문자열로

PK Column1, Column2 
-- ------- ------- 
PK1 apple orange 
PK1 pear  banana 
PK1 honey 
PK2 apple2 orange2 
PK2 pear2  banana2 
PK2 honey2 

결과 :

PK1, apple orange pear banana honey 
PK2, apple2 orange2 pear2 banana2 honey2 

COALESCE을 매우 쉽게 쓸 수 있지만, 내가 XML 경로를 시도 SQL 서버 2005에서 사용할 수 없습니다 있지만 마지막에 추가 문자를 추가합니다.

제게 제안 해 주시겠습니까? 감사.

답변

0

이 의지 트랩 null 또는 빈 값

Declare @YourTable table (PK int,Column1 varchar(25), Column2 varchar(25)) 
Insert Into @YourTable values 
(1,'apple','orange'), 
(1,'pear','banana'), 
(1,'honey', null), 
(2,'apple2','orange2'), 
(2,'pear2','banana2'), 
(2,'honey2', null) 

Select PK 
     ,DelimString = Stuff((Select case when Column1 is null or Column1='' then '' else ' ' + replace(Column1,char(13),'') end 
            +case when Column2 is null or Column2='' then '' else ' ' + replace(Column2,char(13),'') end 
          From @YourTable 
          Where PK=A.PK 
          For XML Path('')), 1, 1, '') 
From @YourTable A 
Group By PK 

반환

PK DelimString 
1 apple orange pear banana honey 
2 apple2 orange2 pear2 banana2 honey2 
+0

감사합니다. 어떤 이유로 XML Path를 사용하여 문자열 끝에 & # xD를 추가했습니다. 제가 어떻게 그것을 제거 할 수 있는지 보게 될 것입니다. – user3015739

+0

@ user3015739 줄 바꿈입니다 –

+0

여기에 설명 된 내용에 따라 TEXT 명령을 넣을 위치를 파악하려고합니다. http://stackoverflow.com/questions/16547175/sql-stuff-and-for-xml-path- 생성 이상한 심볼 – user3015739

0

중 파 쉬운 솔루션은 절에서 선택 사항입니다 코스의 XML PATH

SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(a.Column1) 
FROM dbo.mytbl AS a WHERE a.ColumnX = somecondition 
FOR XML PATH ('') , TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') 

SELECT @cols 

를 사용하는 것입니다 케이스. 그리고 숟가락으로 먹이를주지 않으면, 다른 칼럼에 같은 숟가락을 붙이고 연결하십시오. 빌라!

select ' ' for xml path (''); 

를 귀하의 경우에는 내가이 쿼리 사용할 수 있습니다 :

select t.PK, 
    ltrim(rtrim(replace(
    (select ' ' + isnull(ti.Column1, '') + ' ' + isnull(ti.Column2, '') 
    from yourTable ti 
    where ti.PK = t.PK 
    for xml path ('')) 
    , ' ', ''))) fruits 
from yourTable t 
group by t.PK; 
0

데이터는 '  '처럼 마지막에  을 볼 수 for xml path의 결과에 일부 공백 ' '입니다