MSSQL Server “multiple concat”
12. August 2010 von Hendrik Schreiber
Ich habe nach einer Möglichkeit in MSSQL ein “Mehrfach-Concat” durchzuführen. Dabei sollen ein Feld, das in mehreren Zeilen in der selben Spalte steht, in ein Feld zusammengefügt werden. Fündig geworden bin ich mit dieser interessanten Lösung (Link):
SELECT A.Artikel_PK ,
GroupNameConcat = REPLACE ((
SELECT
Bestellung_PK AS [data()]
FROM X_ArtikelBestellung
WHERE Artikel_PK = A.Artikel_PK
ORDER BY
Voice_PK
FOR XML PATH ('')), ' ', ',')
FROM T_Artikel as A
ORDER BY A.Artikel_PK
In dem Beispiel wird eine Tabelle zurückgegeben mit den Spalten Artikel_PK und GroupNameConcat. In GroupNameConcat stehen für jeden Artikel die zugehörigen Bestellungen kommagetrennt.
Um das besser zu verstehen, siehe auch die entsprechende Microsoft-Erläuterung zu “For XML…”. Nachteil ist in diesem Beispiel, dass alle Leerstellen durch ein Komma ersetzt werden. Wenn man nun ein nvarchar-Feld aneinanderfügen will, könnte man anstatt Bestellung_Pk z.B. Bestellung _PK + ‘;’ schreiben und das Replace weglassen. Dann wäre nur am Ende ein “;” zuviel, aber die Leerzeichen blieben erhalten.
