Heim > Datenbank > MySQL-Tutorial > Wie beseitigen Sie Duplikate in der String_agg -Funktion von SQL Server?

Wie beseitigen Sie Duplikate in der String_agg -Funktion von SQL Server?

Patricia Arquette
Freigeben: 2025-01-24 07:02:10
Original
583 Leute haben es durchsucht

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.

How to Eliminate Duplicates in SQL Server's STRING_AGG Function?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage