首页 > 解决方案 > 如何在 Oracle 中获得类似的值

问题描述

我有一个两列的表

Col1  Col2
A        1
A        2
A        3
B        1
B        2
B        3

我需要的输出是这样的

Col1    Col2
A       1
A       1,2
A       1,2,3
B       1
B       1,2
B       1,2,3

先感谢您。

标签: mysqloracle

解决方案


这是一个适用于 MySQL 的解决方案。它使用 select 子句中的相关子查询将连接在一起的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.


推荐阅读