ID TELNO
---------- --------------------
1 0123456789
1 0207983498
2 0124339848
2 09348374834
2 02387694364
如何查询上表以获得如下输出:
ID TEL_LIST
---------- --------------------
1 0123456789,0207983498
2 0124339848,09348374834,09348374834
我知道我可以使用listagg()通过对列进行分组来连接id。例如,
组内的listagg(id',')(按ID排序)为idList
将返回1,2。
但是,TELNO列无法分组,值通常是唯一的。如何在第二列上进行串联,其中group by不可能?
答案 0 :(得分:4)
查询:
<强> SQLFIDDLEEXAMPLE 强>
SELECT
ID, LISTAGG(TELNO, ', ')
WITHIN GROUP (ORDER BY TELNO)
AS TEL_LIST
FROM tbl
GROUP BY ID;
结果:
| ID | TEL_LIST |
---------------------------------------------
| 1 | 0123456789, 0207983498 |
| 2 | 0124339848, 02387694364, 09348374834 |
答案 1 :(得分:3)
我不知道您是否对ID,TELNO
设置了唯一约束。如果没有,我们需要先从表中过滤唯一值,然后应用LISTAGG
,如下所示:
SELECT ID,
LISTAGG(TELNO, ',') WITHIN GROUP (ORDER BY ID) AS TELNO
FROM (
SELECT UNIQUE
ID,
TELNO
FROM tbl
)
GROUP BY ID;
<强> SQLFIDDLE:强> LINK
如果您查看execution place or the trace file
,则同一组数据的费用将相同,上述解决方案中建议使用查询JUSTIN
答案 2 :(得分:2)
你可以使用wm_concat()函数来执行相同的操作。
select id,wm_concat(telno) from my_table group by id;