使用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函数中的语法的帮助将非常感谢....
答案 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;