Ich habe derzeit eine SQL-Abfrage, die eine Reihe von Feldern zurückgibt. Ich brauche eines der Felder, um effektiv eine Unterabfrage zu sein.
Das Problem im Detail:
Wenn ich eine Tabelle X mit zwei Spalten habe, "ModuleID" und "ModuleValue", wie kann ich eine SQL-Abfrage schreiben, um die Ergebnisse zu übernehmen und in ein Feld zu verketten:
ZB Ergebnisse zurückgegeben von
(SELECT ModuleValue FROM Table_X WHERE [email protected])
Wert 1
Wert 2
Wert 3
...
Ich muss das Ergebnis wie folgt zurückgeben (im Gegensatz zu der obigen Zeile als einzelne Zeile):
Wert 1, Wert 2, Wert 3
Gibt es eine einfache Verkettungsmethode, die Benutzer sein könnte?
EDIT:
DB ist MS TSQL (2005)
Mit MSSQL können Sie Folgendes tun:
declare @result varchar(500)
set @result = ''
select @result = @result + ModuleValue + ', '
from TableX where ModuleId = @ModuleId
Dieses schließt automatisch das nachgestellte Komma aus, im Gegensatz zu den meisten anderen Antworten.
DECLARE @csv VARCHAR(1000)
SELECT @csv = COALESCE(@csv + ',', '') + ModuleValue
FROM Table_X
WHERE ModuleID = @ModuleID
(Wenn die ModuleValue
-Spalte noch kein String-Typ ist, müssen Sie sie möglicherweise in einen VARCHAR
umwandeln.)
In MySQL würden Sie die folgende Funktion verwenden:
SELECT GROUP_CONCAT(ModuleValue, ",") FROM Table_X WHERE [email protected]
Ich bin nicht sicher, welchen Dialekt Sie verwenden.
In SQL Server 2005 und höher können Sie Folgendes tun:
SELECT
(SELECT ModuleValue + ','
FROM dbo.Modules
FOR XML PATH('')
)
FROM dbo.Modules
WHERE ModuleID = 1
Dies sollte Ihnen etwas geben, was Sie suchen.
Marc
Meiner Meinung nach ist die Verwendung von STRING_AGG( ... )
die beste Lösung:
Mehr bei:
Dies hängt von der verwendeten Datenbank ab. MySQL unterstützt zum Beispiel die (nicht standardmäßige) group_concat Funktion. Sie könnten also schreiben:
SELECT GROUP_CONCAT(ModuleValue) FROM Table_X WHERE [email protected]
Group-concat ist jedoch nicht auf allen Datenbankservern verfügbar.
Kleines Update zu Marc, wir werden am Ende ein zusätzliches "," haben. Ich habe Stuff-Funktion verwendet, um zusätzliches Semikolon zu entfernen.
SELECT STUFF(( SELECT ',' + ModuleValue AS ModuleValue
FROM ModuleValue WHERE [email protected]
FOR XML PATH('')
), 1, 1, '' )