Utiliser STRING_AGG pour la concaténation de valeurs distinctes dans SQL Server : une approche pratique
La fonction STRING_AGG de SQL Server simplifie la concaténation de plusieurs valeurs en une seule chaîne. Cependant, réaliser directement une concaténation de valeurs distinctes avec STRING_AGG nécessite une solution de contournement. Cet article décrit un processus en deux étapes pour compter et concaténer des valeurs distinctes à l'aide de STRING_AGG, même avec de grands ensembles de données.
La solution :
Cette méthode utilise une approche GROUP BY en deux étapes :
Éliminer les doublons : La première GROUP BY
opération supprime les lignes en double, garantissant que seules les combinaisons uniques de vos colonnes spécifiées sont prises en compte.
<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') ) F (ID, State, City, Siting) )</code>
Agréger et concaténer : Le second GROUP BY
calcule le nombre distinct et concatène les valeurs uniques à l'aide de STRING_AGG.
<code class="language-sql">SELECT State, City, COUNT(1) AS [# Of Sitings], STRING_AGG(Siting, ',') AS Animals FROM ( SELECT DISTINCT State, City, Siting FROM Sitings ) AS CTE_Animals GROUP BY State, City;</code>
Résultat :
La requête renvoie un tableau résumant les décomptes distincts et les valeurs concaténées :
State | City | # Of Sitings | Animals |
---|---|---|---|
Arizona | Flagstaff | 1 | dog |
Arizona | Phoenix | 2 | bird,dog |
Florida | Orlando | 2 | bird,dog |
Cette technique efficace garantit une concaténation et un comptage précis des valeurs distinctes, même lorsqu'il s'agit d'ensembles de données étendus. Cette approche reproduit efficacement la fonctionnalité de COUNT(DISTINCT <column>)
tout en fournissant également la chaîne concaténée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!