Ich portiere eine Anwendung, die ich ursprünglich geschrieben habe, um auf Apache mit PHP und einer MySQL-Datenbank zu laufen. Eine der Abfragen verwendete die MySQL-Funktionen Concat_WS
und Group_Concat
, um zuerst ein paar verschiedene Spalten in eine Zeichenfolge zu verketten und dann alle Elemente, die durch die Group_By
-Klausel gruppiert wurden, zu verketten.Ich erfülle MYSQL's Group_Concat in SQL Server
Als Beispiel:
ID Name Candy
1 John M&Ms
1 John KitKat
Die Abfrage:
Select Group_Concat(Concat_WS('-',Name, Candy) Separator '00--00') as UserCandy
From ExampleTable
Group By ID
Das Ergebnis:
UserCandy
John-M&Ms00--00John-KitKat
Nun, ich versuche, das gleiche Ergebnis in SQL Server 2008 zu erreichen mit PHP 5.4+.
Was ich versucht habe:
SELECT Stuff(name + ';' + candy, 1, 0, '-----') AS UserCandy
FROM test
Das Problem can be seen in the fiddle that I have setup.
Das erwartete Ergebnis wäre:
-----John;MMs-----John;KitKat
Schließlich dies wird noch schwieriger, wenn ich mehr Spalten in den Mix. Ich möchte die Ergebnisse zusammenführen (wie oben gezeigt), wo die ID die gleiche ist. Dies funktioniert sehr gut mit group_concat
, weil es automatisch Zeilen zusammenfassen wird, die zusammen gruppiert wurden.
@bluefeet Ich habe diese Frage bereits gesehen, aber ich versuche, die Verwendung von XML zu vermeiden. Ich wollte wirklich das gleiche Format beibehalten, das ich in der vorherigen Version der App verwendet hatte. –
Es gibt Möglichkeiten, die Daten in dem gewünschten Format zu erhalten, aber in SQL Server gibt es keine einfache Möglichkeit, Daten aus mehreren Zeilen in einem einzigen zu verketten. – Taryn
@bluefeet Also, wie könnte ich diese Frage so ändern, dass sie beantwortet und nicht geschlossen wird? Ich habe heute eine Menge über das Thema gelesen und ich habe es immer noch nicht selbst verstanden (offensichtlich, wie ich jetzt hier bin) –