11

以下のコード(ここから取得)は、複数のフィールドをコンマで区切ってマージするのに適しています。

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

問題は"FORXML PATH(''))、1,1、''"にあると思われますが、どの値を入力すればよいかわかりません。

どんな助けでも大歓迎です。

ありがとう!

4

2 に答える 2

11

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
于 2013-03-22T14:22:17.913 に答える
4

XMLが追加するすべての特殊文字(そのうちの#x0D;1つ)は、次を使用して処理できます。

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

詳細はこちら

また、の3番目のパラメーターをSTUFF、結果の開始時にスキップする必要のある文字数に調整する必要があります(この場合、とがあるため2char(13)に調整しますchar(10))。

したがって、ソリューションは次のようになります。

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
于 2017-05-13T12:13:49.223 に答える