Maison >base de données >tutoriel mysql >Comment éliminer les doublons dans la fonction STRING_AGG de SQL Server ?

Comment éliminer les doublons dans la fonction STRING_AGG de SQL Server ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-24 07:02:10629parcourir

Fonction STRING_AGG de SQL Server : suppression des valeurs en double

Cet article aborde le défi consistant à éliminer les valeurs en double dans la fonction STRING_AGG dans SQL Server 2017 et les versions ultérieures. La fonction standard STRING_AGG ne prend pas directement en charge le mot-clé DISTINCT pour l'agrégation de valeurs uniques.

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

Le problème : Utiliser directement DISTINCT avec STRING_AGG pour compter et concaténer des valeurs uniques n'est pas possible.

L'objectif : Générer une chaîne concaténée de valeurs uniques à l'aide de STRING_AGG.

Exemple illustratif :

Considérons un tableau Sitings avec les colonnes State, City et 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>

Une simple requête utilisant COUNT(DISTINCT Siting) et STRING_AGG(Siting, ',') donne :

State City # Of Types Animals
Arizona Flagstaff 1 dog
Florida Orlando 2 dog,bird
Arizona Phoenix 2 bird,bird,bird,dog,bird

Le résultat souhaité, cependant, devrait supprimer les doublons de la colonne « Animaux » pour Phoenix :

State City # Of Types Animals
Arizona Flagstaff 1 dog
Florida Orlando 2 dog,bird
Arizona Phoenix 2 bird,dog

La solution : une approche à double regroupement

Pour y parvenir, nous utilisons un processus de regroupement en deux étapes avec des expressions de table communes (CTE) :

<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>

Le résultat : Cette requête produit avec succès le résultat souhaité :

State City # Of Sitings Animals
Arizona Flagstaff 1 dog
Arizona Phoenix 2 bird,dog
Florida Orlando 2 dog,bird

Cette technique de double regroupement regroupe d'abord par State, City et Siting pour éliminer les doublons au sein de chaque ville, puis regroupe à nouveau par State et City pour concaténer les emplacements uniques.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn