Génération de valeurs uniques avec la fonction STRING_AGG de SQL Server 2017
La fonction STRING_AGG
dans SQL Server 2017 ne prend pas directement en charge les valeurs distinctes. Cependant, il est possible d’obtenir des résultats agrégés uniques en utilisant une approche en deux étapes. Cette méthode évite la syntaxe invalide de STRING_AGG(DISTINCT column, ',')
.
La solution implique une expression de table commune (CTE) pour prétraiter les données. Le CTE regroupe les données pour éliminer les doublons avant l'agrégation finale.
L'exemple ci-dessous illustre cette technique. Le Sitings
CTE initial fournit des exemples de données. Le CTE_Animals
CTE regroupe ensuite par State
, City
et Siting
pour supprimer les entrées redondantes. La requête principale utilise ensuite STRING_AGG
pour concaténer les valeurs Siting
uniques pour chaque combinaison State
et City
.
<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) ) ,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>
Cette approche garantit que la colonne Animals
finale contient uniquement des observations d'animaux uniques pour chaque emplacement, tandis que la colonne # Of Sitings
reflète le décompte distinct. La clause ORDER BY
garantit un ordre de sortie cohérent et prévisible.
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!