I used WM_CONCAT
in my sql query. The database has been updated to version 12c and WM_CONCAT
doesn`t work.
Query had value:
x
Select r.product_id, count (1) how_many, wm_concat (distinct r.number) numbers From
How to transform it into LISTAGG
functions. I try this, but it doesn`t work :
Select r.product_id, count(1) how_many, LISTAGG(r.number, ',') WITHIN GROUP (order by r.number) numbers From
Advertisement
Answer
you should add Group by in your query
with tab as(
select '10' as num, 'A' as product from dual union all
select '10' as num, 'B' as product from dual union all
select '10' as num, 'C' as product from dual union all
select '10' as num, 'D' as product from dual union all
select '20' as num, 'A' as product from dual union all
select '20' as num, 'B' as product from dual union all
select '30' as num, 'A' as product from dual
)
select product
, count (1) how_many
, LISTAGG(num, ',') WITHIN GROUP (order by num)
from tab
group by product
but you have to be careful, because by using listagg
you can only concatenate strings up to 4K. There are also other string aggregation techniques, have a look at the answer here.
PRODUCT | HOW_MANY | LISTAGG(NUM,',')WITHINGROUP(ORDERBYNUM) :------ | -------: | :-------------------------------------- A | 3 | 10,20,30 B | 2 | 10,20 C | 1 | 10 D | 1 | 10
db<>fiddle here