假设我有一个表tbl
,其中包含以下数据:
| col2| col2 |
| --| ------------ |
| 一个| 1 |
| 二个| 2 |
| 三个| 3 |
| 一个| 1 |
| 二个| 2 |
| 一个| 1 |
| 二个| 2 |
| 三个| 3 |
期望的结果
我想将col 1中的那些在col 2中具有相同值集的项目分组在一起。
例如:
| 列表2| list2 |
| --| ------------ |
| 一个| 1 |
| 二个| 2 |
| 三个| 3 |
| 一个| 1 |
| 二个| 2 |
当前结果
我已经编写了一些SQL来实现这一点,然而,我的最终结果只给了我一个每组col 1一行。
| 列表2| list2 |
| --| ------------ |
| 一、二| 1, 2 |
| 一、二、三| 1, 2, 3 |
select listagg(col1, ', ') set1, la as set2
from (
select LISTAGG(t.col2, ', ') la, t.col1
from tbl t
GROUP BY t.col1
)
GROUP BY la
字符串
*DDL
CREATE TABLE "TBL"
( "COL1" VARCHAR2(20 BYTE),
"COL2" VARCHAR2(20 BYTE)
);
INSERT INTO TBL VALUES ('A','1');
INSERT INTO TBL VALUES ('A','2');
INSERT INTO TBL VALUES ('A','3');
INSERT INTO TBL VALUES ('B','1');
INSERT INTO TBL VALUES ('B','2');
INSERT INTO TBL VALUES ('C','1');
INSERT INTO TBL VALUES ('C','2');
INSERT INTO TBL VALUES ('C','3');
型
2条答案
按热度按时间uubf1zoe1#
在大型数据集上不是很有效,但在您的示例中有效:
字符串
或者使用listagg()over(partition)version:
型
uyto3xhc2#
使用
LISTAGG
两次,一次作为解析函数,然后作为聚合函数:字符串
对于样本数据,输出:
| COL2| COL2 |
| --| ------------ |
| 一个| 1 |
| 二个| 2 |
| 三个| 3 |
| 一个| 1 |
| 二个| 2 |
fiddle