Agrégation de chaînes SQL Server avec fonctions d'agrégation définies par l'utilisateur
Besoin de concaténer des chaînes au sein de groupes dans SQL Server, similaire à GROUP_CONCAT
de MySQL ? SQL Server 2005 et les versions ultérieures n'ont pas d'équivalent intégré, nécessitant une solution plus avancée. Une fonction d'agrégation définie par l'utilisateur (UDAF) fournit une approche efficace.
Considérez cet exemple de données :
Id | Value |
---|---|
1 | 'A' |
1 | 'B' |
2 | 'C' |
L'objectif est d'atteindre ce résultat :
Id | Value |
---|---|
1 | 'AB' |
2 | 'C' |
Création de l'UDAF
Le code suivant définit un UDAF nommé AggregateConcat
pour effectuer la concaténation de chaînes au sein de chaque groupe :
<code class="language-sql">CREATE FUNCTION AggregateConcat (@id INT, @value VARCHAR(MAX)) RETURNS VARCHAR(MAX) AS BEGIN DECLARE @result VARCHAR(MAX) = ''; SELECT @result = @result + Value FROM TABLE_NAME WHERE Id = @id; RETURN @result; END;</code>
Utiliser l'UDAF
Cette fonction peut être utilisée dans une instruction SELECT
comme n'importe quelle autre fonction d'agrégation :
<code class="language-sql">SELECT Id, dbo.AggregateConcat(Id, Value) AS ConcatenatedValue FROM TABLE_NAME GROUP BY Id;</code>
Cette requête regroupe les données par Id
et applique la fonction AggregateConcat
pour concaténer la colonne Value
pour chaque groupe, produisant le résultat souhaité. N'oubliez pas de remplacer TABLE_NAME
par le nom réel de votre table. Cette version simplifiée évite l'approche moins efficace basée sur le curseur. Pour les ensembles de données très volumineux, envisagez des méthodes alternatives plus performantes, comme l'utilisation de STRING_AGG
(disponible dans SQL Server 2017 et versions ultérieures).
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!