E-Mails in SQL Server aggregieren: Eine GROUP BY- und STUFF()-Lösung
Die GROUP BY
-Klausel von SQL Server eignet sich hervorragend zum Zusammenfassen von Daten. Eine häufige Aufgabe besteht darin, die Werte mehrerer Zeilen zu einer einzigen Zeichenfolge zusammenzufassen, oft durch Kommas getrennt. Dies wird mithilfe von Funktionen wie STUFF()
.
Lassen Sie uns dies anhand einer Beispieltabelle für einen Mitarbeiterbericht veranschaulichen:
ID | ReportId | |
---|---|---|
1 | 1 | john@example.com |
2 | 2 | mary@example.com |
3 | 1 | jane@example.com |
4 | 3 | david@example.com |
5 | 3 | susan@example.com |
Um mit jedem ReportId
verknüpfte E-Mails zu verketten und Kommas als Trennzeichen zu verwenden, funktioniert diese Abfrage:
<code class="language-sql">SELECT ReportId, Email = STUFF((SELECT ', ' + Email FROM your_table b WHERE b.ReportId = a.ReportId FOR XML PATH('')), 1, 2, '') FROM your_table a GROUP BY ReportId;</code>
Die Funktion STUFF()
ändert eine Zeichenfolge. Es werden vier Argumente benötigt: die Zeichenfolge, die Startposition, die Anzahl der zu entfernenden Zeichen und die Ersatzzeichenfolge.
Die äußere Abfrage gruppiert nach ReportId
. Die innere Abfrage unter Verwendung von FOR XML PATH('')
verkettet E-Mails für jede Gruppe. STUFF()
entfernt dann das führende Komma und das Leerzeichen.
Die Ausgabe der Abfrage:
ReportId | |
---|---|
1 | john@example.com, jane@example.com |
2 | mary@example.com |
3 | david@example.com, susan@example.com |
Das obige ist der detaillierte Inhalt vonWie verkette ich E-Mails nach ReportId mithilfe von GROUP BY und STUFF() von SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!