关于sql:在Oracle中使用LISTAGG函数

 2020-10-18 

Using LISTAGG function in Oracle

我有两张桌子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
category
--------

id      product     seq_num
cat12   prod12      0
cat23   prod12      1
cat34   prod12      2

prod
-----

sku     prod    seq_num
sku123  prod12  0
sku234  prod12  1
sku345  prod12  2

我正在尝试使用LISTAGG函数并带来如下输出:

1
2
3
4
5
6
output
------
skuid   prod    catids
sku123  prod12  cat12,cat23,cat34
sku234  prod12  cat12,cat23,cat34
sku345  prod12  cat12,cat23,cat34

当我单独使用类别表时,我可以使用LISTAGG并正确汇总输出(无须输入)

使用以下查询:

1
2
3
4
SELECT product,LISTAGG(id, ',')
WITHIN GROUP (ORDER BY id) AS catids
FROM category
GROUP BY product;

但是我无法将其与prod表连接起来并无法获得所需的输出。
请帮忙。


您可以在加入后执行此操作:

1
2
3
4
5
6
SELECT s.sku,t.product,
       LISTAGG(t.id, ',') WITHIN GROUP (ORDER BY id) AS catids
FROM category t
INNER JOIN prod s
 ON(t.product = s.prod)
GROUP BY t.product,s.sku;