2013-03-22 10 views
7

Der Code unten (den ich von here erhalten habe) macht einen guten Job beim Zusammenführen mehrerer Felder durch Kommas trennen.Mehrere Zeilen in eine Spalte mit Wagenrücklaufzeilen zusammenführen

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 

Ich muss die Kommas mit Wagenrücklauf Zeilenvorschübe ersetzen. Ich habe den folgenden Code ausprobiert, aber er fing an, die Einträge mit diesen Zeichen zu trennen: "# 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 

Ich vermute, dass das Problem mit dem "FOR XML PATH ('')), 1,1 ''," aber ich weiß nicht, was zu setzen Werte.

Jede Hilfe würde sehr geschätzt werden.

Danke!

Antwort

8

Sie können das Komma tatsächlich durch das Ergebnis von STUFF ersetzen.

Versuchen Sie folgendes:

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

Es hat funktioniert! Vielen Dank! :) – Osprey

+0

Wie wäre es mit einer neuen Zeile anstelle von Komma? –

3

Sie alle Sonderzeichen umgehen können, die XML fügt (davon #x0D; ist ein) unter Verwendung von:

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

Weitere Informationen here.

Sie werden auch den dritten Parameter von STUFF auf die Anzahl der Zeichen anpassen müssen Sie zu Beginn Ihres Ergebnis überspringen müssen (in diesem Fall 2, weil Sie char(13) und char(10) haben).

So würde Ihre Lösung:

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 
Verwandte Themen