oracle 12c listagg使用连接的字段值

时间:2015-12-11 20:22:50

标签: sql oracle

使用NVL2连接两个字段,以下内容返回正确的数据。

 select mi2.item_id,
     nvl2(mipp2.serial_number, mipp2.serial_number||'-', null)
     ||nvl2(prod2.code, '' ||prod2.code, null) as green_code
           from store_item mi2
           join store_item_products mipp2
             on mi2.store_item_id = mipp2.store_item_id
           join product prod2 
             on mipp2.product_id = prod2.id 

我现在需要做的是在listagg函数中的一个语句中使用green_code数据,以在单个item_Id值中收集多个green_code值

我所尝试的一切都是返回成堆的'NULL'值,而没有正确列出连接的green_code值。

还有不到50个额外的字段,来自这些相同的表和另外8个表,需要由单个SQL语句(进入视图)返回,所以我试图远离必须列出所有字段到分组声明。

任何有关将上面列出的连接字段(green_code)收集到单个item_Id值中的listagg函数中的语法的帮助将非常感谢....

1 个答案:

答案 0 :(得分:0)

我可能不正确,因为你需要完成的事情并不清楚。但是使用子查询就是你所需要的。语法可能是错误的,但希望你能得到这个想法。 例如:

SELECT item_id, listagg(green_code, ',') WITHIN GROUP (ORDER BY green_code) as green_code_list 
FROM (select mi2.item_id item_id,
     nvl2(mipp2.serial_number, mipp2.serial_number||'-', null)
     ||nvl2(prod2.code, '' ||prod2.code, null) as green_code
           from store_item mi2
           join store_item_products mipp2
             on mi2.store_item_id = mipp2.store_item_id
           join product prod2 
             on mipp2.product_id = prod2.id )
GROUP BY item_id;