Utilisation de STRING_AGG de SQL Server pour les valeurs distinctes et la concaténation
La fonction STRING_AGG de SQL Server concatène efficacement les valeurs de plusieurs lignes. Cependant, obtenir directement des valeurs distinctes et leur chaîne concaténée nécessite une approche légèrement plus complexe. Le défi réside dans la combinaison des fonctionnalités de COUNT(DISTINCT ...)
avec l'agrégation de chaînes.
Une solution courante implique un processus de regroupement en deux étapes. La première clause GROUP BY
identifie des combinaisons uniques de colonnes pertinentes (par exemple, State, City, Siting), éliminant ainsi les doublons. Le second GROUP BY
agrège ensuite ces combinaisons uniques, en utilisant STRING_AGG pour concaténer les valeurs distinctes. Cette méthode fournit à la fois un nombre de valeurs distinctes et la chaîne concaténée.
Voici un exemple illustrant cette technique :
<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>
Cette requête produit un ensemble de résultats montrant des observations d'animaux distinctes par ville et par état :
<code>+---------+-----------+--------------+----------+ | State | City | # Of Sitings | Animals | +---------+-----------+--------------+----------+ | Arizona | Flagstaff | 1 | dog | | Arizona | Phoenix | 2 | bird,dog | | Florida | Orlando | 2 | bird,dog | +---------+-----------+--------------+----------+</code>
Gestion des chaînes longues :
Si la chaîne concaténée de sites dépasse la limite de 8 000 caractères de varchar
, il est nécessaire de convertir explicitement la colonne Siting
en varchar(max)
avant d'utiliser STRING_AGG
pour éviter la troncature :
<code class="language-sql">STRING_AGG(CAST(Siting AS VARCHAR(MAX)), ',') AS Animals</code>
Cela garantit que la chaîne concaténée peut accueillir des résultats plus longs.
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!