Funktion STRING_AGG
von SQL Server: Entfernen doppelter Werte
Dieser Artikel befasst sich mit der Herausforderung, doppelte Werte innerhalb der STRING_AGG
-Funktion in SQL Server 2017 und späteren Versionen zu entfernen. Die Standardfunktion STRING_AGG
unterstützt das Schlüsselwort DISTINCT
für die Aggregation eindeutiger Werte nicht direkt.
Das Problem: Die direkte Verwendung von DISTINCT
mit STRING_AGG
zum Zählen und Verketten eindeutiger Werte ist nicht möglich.
Das Ziel: Generieren Sie eine verkettete Zeichenfolge eindeutiger Werte mit STRING_AGG
.
Anschauliches Beispiel:
Betrachten wir eine Sitings
-Tabelle mit den Spalten State
, City
und Siting
:
<code>ID | State | City | Siting --------------------------------- 1 | Florida | Orlando | bird 2 | Florida | Orlando | dog 3 | Arizona | Phoenix | bird 4 | Arizona | Phoenix | dog 5 | Arizona | Phoenix | bird 6 | Arizona | Phoenix | bird 7 | Arizona | Phoenix | bird 8 | Arizona | Flagstaff | dog</code>
Eine einfache Abfrage mit COUNT(DISTINCT Siting)
und STRING_AGG(Siting, ',')
ergibt:
State | City | # Of Types | Animals |
---|---|---|---|
Arizona | Flagstaff | 1 | dog |
Florida | Orlando | 2 | dog,bird |
Arizona | Phoenix | 2 | bird,bird,bird,dog,bird |
Die gewünschte Ausgabe sollte jedoch Duplikate aus der Spalte „Tiere“ für Phoenix entfernen:
State | City | # Of Types | Animals |
---|---|---|---|
Arizona | Flagstaff | 1 | dog |
Florida | Orlando | 2 | dog,bird |
Arizona | Phoenix | 2 | bird,dog |
Die Lösung: Ein Double-Grouping-Ansatz
Um dies zu erreichen, verwenden wir einen zweistufigen Gruppierungsprozess mit Common Table Expressions (CTEs):
<code class="language-sql">WITH Sitings AS ( SELECT * FROM (VALUES (1, 'Florida', 'Orlando', 'bird'), (2, 'Florida', 'Orlando', 'dog'), (3, 'Arizona', 'Phoenix', 'bird'), (4, 'Arizona', 'Phoenix', 'dog'), (5, 'Arizona', 'Phoenix', 'bird'), (6, 'Arizona', 'Phoenix', 'bird'), (7, 'Arizona', 'Phoenix', 'bird'), (8, 'Arizona', 'Flagstaff', 'dog') ) AS F (ID, State, City, Siting) ), CTE_Animals AS ( SELECT State, City, Siting FROM Sitings GROUP BY State, City, Siting ) SELECT State, City, COUNT(1) AS [# Of Sitings], STRING_AGG(Siting,',') AS Animals FROM CTE_Animals GROUP BY State, City ORDER BY State, City;</code>
Das Ergebnis: Diese Abfrage erzeugt erfolgreich die gewünschte Ausgabe:
State | City | # Of Sitings | Animals |
---|---|---|---|
Arizona | Flagstaff | 1 | dog |
Arizona | Phoenix | 2 | bird,dog |
Florida | Orlando | 2 | dog,bird |
Diese Doppelgruppierungstechnik gruppiert zunächst nach State
, City
und Siting
, um Duplikate innerhalb jeder Stadt zu eliminieren, und gruppiert dann erneut nach State
und City
, um die eindeutigen Standorte zu verketten.
Das obige ist der detaillierte Inhalt vonWie beseitigen Sie Duplikate in der String_agg -Funktion von SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!