Verwendung von STRING_AGG von SQL Server für eindeutige Werte und Verkettung
Die STRING_AGG-Funktion von SQL Server verkettet effizient Werte aus mehreren Zeilen. Das direkte Erhalten unterschiedlicher Werte und ihrer verketteten Zeichenfolge erfordert jedoch einen etwas komplexeren Ansatz. Die Herausforderung besteht darin, die Funktionalität von COUNT(DISTINCT ...)
mit der String-Aggregation zu kombinieren.
Eine gängige Lösung beinhaltet einen zweistufigen Gruppierungsprozess. Die erste GROUP BY
-Klausel identifiziert eindeutige Kombinationen relevanter Spalten (z. B. Bundesland, Stadt, Standort) und eliminiert so Duplikate. Das zweite GROUP BY
aggregiert dann diese eindeutigen Kombinationen und verwendet STRING_AGG, um die unterschiedlichen Werte zu verketten. Diese Methode liefert sowohl eine Anzahl unterschiedlicher Werte als auch die verkettete Zeichenfolge.
Hier ist ein Beispiel, das diese Technik demonstriert:
<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(*) AS [# Of Sitings], STRING_AGG(Siting, ',') AS Animals FROM CTE_Animals GROUP BY State, City ORDER BY State, City;</code>
Diese Abfrage erzeugt einen Ergebnissatz, der unterschiedliche Tiersichtungen pro Stadt und Bundesland zeigt:
<code>+---------+-----------+--------------+----------+ | State | City | # Of Sitings | Animals | +---------+-----------+--------------+----------+ | Arizona | Flagstaff | 1 | dog | | Arizona | Phoenix | 2 | bird,dog | | Florida | Orlando | 2 | bird,dog | +---------+-----------+--------------+----------+</code>
Umgang mit langen Zeichenfolgen:
Wenn die verkettete Zeichenfolge von Standorten die 8000-Zeichen-Grenze von varchar
überschreitet, ist eine explizite Umwandlung der Spalte Siting
in varchar(max)
vor der Verwendung von STRING_AGG
erforderlich, um eine Kürzung zu vermeiden:
<code class="language-sql">STRING_AGG(CAST(Siting AS VARCHAR(MAX)), ',') AS Animals</code>
Dadurch wird sichergestellt, dass die verkettete Zeichenfolge längere Ergebnisse aufnehmen kann.
Das obige ist der detaillierte Inhalt vonWie kann ich STRING_AGG von SQL Server verwenden, um eindeutige Werte und deren verkettete Zeichenfolge abzurufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!