130 votes

Comment utiliser GROUP_CONCAT dans un CONCAT en MySQL

Si j'ai une table avec les données suivantes dans MySQL :

id       Name       Value
1          A          4
1          A          5
1          B          8
2          C          9

comment puis-je le mettre dans le format suivant ?

id         Column
1          A:4,5,B:8
2          C:9

Je pense que je dois utiliser GROUP_CONCAT . Mais je ne suis pas sûr de savoir comment cela fonctionne.

1voto

Mrigank Shekhar Points 19
SELECT 
    id, 
    Group_concat(`column`) 
FROM
    (SELECT 
        id, 
        Concat(`name`, ':', Group_concat(`value`)) AS `column` 
    FROM mytbl 
    GROUP  BY id, name) tbl 
GROUP BY id;

0voto

Novy Points 1

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X