簡體   English   中英

SQL使用listagg()並按非重復值分組

[英]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列無法分組,並且值通常是唯一的。 在無法進行分組依據的第二列上如何進行串聯?

查詢:

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 |

我不知道您是否對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM