Ето решение, което би работило за MySQL. Той използва корелирана подзаявка в клаузата за избор, за да групира конкатенацията заедно Col2
стойности. Логиката е, че ние обобщаваме само стойности, които са по-малки или равни на текущия ред, за дадена група записи, споделящи един и същ Col1
стойност.
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;
Ето същата заявка в 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;
Обърнете внимание, че единствената реална промяна е заместването на LISTAGG
за GROUP_CONCAT
.