2017-02-07 21 views
0

SQL Server 2005を使用していて、複数の行を1つの文字列に連結する簡単な方法を探したいと考えています。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 Server 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

はるかに容易ソリューションは句があなたにオプションであるWHEREもちろん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 

を使用することです場合。そしてあなたにスプーンを与えることなく、あなたの他のコラムに同じものを適用して連結してください。 Voila!

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の結果にいくつかの空白' 'ある