Aggregieren von Daten mit durch Kommas getrennten Zeichenfolgen in SQL Server
Die GROUP BY
-Klausel von SQL Server eignet sich hervorragend für die Datenaggregation. Aber wie kombiniert man mehrere Werte aus gruppierten Zeilen in einer einzigen, durch Kommas getrennten Zeichenfolge?
Die Herausforderung:
Stellen Sie sich einen Tisch wie diesen vor:
<code>ID ReportId Email 1 1 a@domain.com 2 2 b@domain.com 3 1 c@domain.com 4 3 d@domain.com 5 3 e@domain.com</code>
Das Ziel besteht darin, die E-Mails nach ReportId
zu gruppieren und für jeden Bericht in einer durch Kommas getrennten Liste zu verketten.
Lösung: Unterabfrage und FOR XML PATH
So erreichen Sie dies mit einer Unterabfrage und der Methode FOR XML PATH
:
<code class="language-sql">SELECT ReportId, Email = STUFF((SELECT ', ' + Email FROM table_name b WHERE b.ReportId = a.ReportId FOR XML PATH('')), 1, 2, '') FROM table_name a GROUP BY ReportId;</code>
Erklärung:
SELECT
-Anweisung ruft alle E-Mails ab, die mit einem bestimmten ReportId
verknüpft sind.''
stellt sicher, dass kein übergeordneter Knoten erstellt wird.STUFF
entfernt das durch die Anweisung SELECT
hinzugefügte führende Komma und Leerzeichen, was zu einer sauberen, durch Kommas getrennten Zeichenfolge führt.Ergebnis:
Die Abfrage erzeugt die folgende Ausgabe:
<code>ReportId Email 1 a@domain.com, c@domain.com 2 b@domain.com 3 d@domain.com, e@domain.com</code>
Dadurch werden mehrere E-Mail-Adressen effektiv in einer einzigen durch Kommas getrennten Zeichenfolge für jede ReportId
zusammengefasst. Obwohl dieser Ansatz gut funktioniert, sollten Sie für potenziell effizientere Lösungen die Erkundung anderer datenbankspezifischer Funktionen wie STRING_AGG
(verfügbar in späteren SQL Server-Versionen) in Betracht ziehen.
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von GROUP BY in SQL Server mehrere Werte zu einer durch Kommas getrennten Zeichenfolge verketten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!