[英]SQL using listagg() and group by non duplicated values
ID TELNO
---------- --------------------
1 0123456789
1 0207983498
2 0124339848
2 09348374834
2 02387694364
我如何查詢上表以獲取如下輸出:
ID TEL_LIST
---------- --------------------
1 0123456789,0207983498
2 0124339848,09348374834,09348374834
我知道我可以使用listagg()通過對列進行分組來連接ID。 例如,
組(按ID排序)內的listagg(id',')作為idList
將返回1,2。
但是,TELNO列無法分組,並且值通常是唯一的。 在無法進行分組依據的第二列上如何進行串聯?
查詢:
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 |
我不知道您是否對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: 鏈接
如果查看execution place or the trace file
,則在同一組數據上的成本將相同,在上述解決方案中建議使用查詢JUSTIN
您可以使用wm_concat()函數執行相同的操作。
select id,wm_concat(telno) from my_table group by id;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.