【发布时间】:2015-12-11 20:22:49
【问题描述】:
使用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 函数的语法帮助将不胜感激....
【问题讨论】:
-
LISTAGG(all_that_mess, ', ') WITHIN GROUP (ORDER BY NULL)如果这不起作用,请使用外部查询来执行此操作,可能是函数中表达式的评估顺序不稳定。 -
感谢您的回复。我无法得到您的建议以产生任何结果。问题很复杂,因为要连接的任何一个字段都可能为空,并且它们来自两个不同的表,并且要连接这两个表,另一个表必须位于它们之间,因为这两个基表没有直接关系。如前所述,我的代码将它们正确连接(我认为)但是当我尝试将它们作为一个单元作为 green_code 与 item_Id 列出时,我无法得到任何有意义的结果。由于所有其他字段的必要添加,它变得更加复杂。
-
尝试在 sqlfiddle 上重新创建问题
-
这让我更接近 ahtn 我尝试过的任何东西,并且我尝试过 doZens opf 各种语法安排。
-
{选择 t.store_item_id, listagg(green_code, ',' ) 组内(按 t.store_item_id 排序)作为 green_code 从(选择 mi2.store_item_id, nvl2(mipp2.serial_number, mipp2.serial_number| |'-', null) ||nvl2(prod2.code, '' ||prod2.code, null) as green_code from ml_store_item mi2 join ml_store_item_products mipp2 on mi2.store_item_id = mipp2.store_item_id join product prod2 on mipp2.product_id = prod2 .id) t;}