IF OBJECT_ID('master..test') is not null Drop table test
CREATE TABLE test (ID INTEGER, NAME VARCHAR (50), VALUE INTEGER );
INSERT INTO test VALUES (1, 'A', 4);
INSERT INTO test VALUES (1, 'A', 5);
INSERT INTO test VALUES (1, 'B', 8);
INSERT INTO test VALUES (2, 'C', 9);
select distinct NAME , LIST = Replace(Replace(Stuff((select ',', +Value from test where name = _a.name for xml path('')), 1,1,''),'<Value>', ''),'</Value>','') from test _a order by 1 desc
Le nom de ma table est test , et pour la concaténation, j'utilise la syntaxe For XML Path(''). La fonction stuff insère une chaîne dans une autre chaîne. Elle supprime une longueur spécifiée de caractères dans la première chaîne à la position de départ, puis insère la seconde chaîne dans la première chaîne à la position de départ.
Les fonctions de STUFF ressemblent à ceci : STUFF (expression de caractères, début, longueur, expression de caractères)
expression_de_caractère Est une expression de données de caractères. L'expression de caractères peut être une constante, une variable ou une colonne de l'un des éléments suivants caractères ou de données binaires.
commencer Est une valeur entière qui spécifie l'endroit où commencer la suppression et l'insertion. Si start ou length est négatif une chaîne nulle est renvoyée. Si start est plus long que la première expression de caractères, une chaîne nulle est renvoyée. start peut être de type bigint.
longueur Est un nombre entier qui spécifie le nombre de caractères à supprimer. Si longueur est supérieure à la première expression_caractère, la suppression se fait jusqu'au dernier caractère de la dernière expression_caractère. length peut être de type bigint.