Voici une solution qui fonctionnerait pour MySQL. Il utilise une sous-requête corrélée dans la clause select pour regrouper la concaténation Col2
valeurs. La logique est que nous agrégeons uniquement les valeurs inférieures ou égales à la ligne actuelle, pour un groupe donné d'enregistrements partageant le même Col1
valeur.
SELECT
Col1,
(SELECT GROUP_CONCAT(t2.Col2 ORDER BY t2.Col2) FROM yourTable t2
WHERE t2.Col2 <= t1.Col2 AND t1.Col1 = t2.Col1) Col2
FROM yourTable t1
ORDER BY
t1.Col1,
t1.Col2;
Voici la même requête dans Oracle :
SELECT
Col1,
(SELECT LISTAGG(t2.Col2, ',') WITHIN GROUP (ORDER BY t2.Col2) FROM yourTable t2
WHERE t2.Col2 <= t1.Col2 AND t1.Col1 = t2.Col1) Col2
FROM yourTable t1
ORDER BY
t1.Col1,
t1.Col2;
Notez que le seul vrai changement est de remplacer LISTAGG
pour GROUP_CONCAT
.