【问题标题】:oracle 12c listagg using concatenated field valuesoracle 12c listagg 使用连接字段值
【发布时间】: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;}

标签: sql oracle


【解决方案1】:

我可能不正确,因为您需要完成的内容尚不清楚。但是使用子查询似乎就是您所需要的。语法可能是错误的,但希望你能明白。 例如:

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-18
    • 2021-08-06
    • 2021-06-03
    • 1970-01-01
    • 2020-05-25
    • 2020-10-09
    • 1970-01-01
    • 2019-02-15
    相关资源
    最近更新 更多