Heim >Datenbank >MySQL-Tutorial >Wie kann ich mithilfe von GROUP BY in SQL Server mehrere Werte zu einer durch Kommas getrennten Zeichenfolge verketten?

Wie kann ich mithilfe von GROUP BY in SQL Server mehrere Werte zu einer durch Kommas getrennten Zeichenfolge verketten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-10 17:37:45227Durchsuche

How Can I Concatenate Multiple Values into a Comma-Separated String Using GROUP BY in SQL Server?

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:

  • Unterabfrage: Die innere SELECT-Anweisung ruft alle E-Mails ab, die mit einem bestimmten ReportId verknüpft sind.
  • FOR XML PATH(''): Diese Funktion wandelt die E-Mail-Ergebnisse in eine XML-Zeichenfolge um, wobei jede E-Mail ein separater Knoten ist. Das '' stellt sicher, dass kein übergeordneter Knoten erstellt wird.
  • STUFF: Die Funktion 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn