问题描述
请注意,我是一个新手 (大约8个月接触Oracle Sql-所以请温柔 :)
我有以下场景
表A包含:
Wave_No,Wave_Desc,Wave_Date
表B包含:
Wave_No,Order_No,Order_Date,Order_Status
表C包含:
订单 _ 否,行 _ 否,发货 _ 数量,订单 _ 数量
注:
1.表A包含许多波
2.每波可以有很多订单,有多个订单日期和状态
3.订单状态可以是拣货,完成
4.以下是sql:
问题: 我需要报告按波浪、波浪描述、订单数量和挑选纸箱的总和和要挑选的纸箱进行总结,但我也想知道最旧的 “未确认订单” 和年龄 (从订单日期到当前日期的天数)。
如何获得处于状态拣选的订单的最旧的order_date?
当前代码返回最旧的日期,而无需测试订单状态,并且有较旧的订单已完成,因此我想绕过它们并找到最旧的拣选订单。
我尝试了注释掉的代码,但这坚持认为我在组中有ord_date,然后影响我的结果 (我得到同一波的多行,每个不同的订单日期都有中断 :(
感谢您的帮助。
我有以下场景
表A包含:
Wave_No,Wave_Desc,Wave_Date
表B包含:
Wave_No,Order_No,Order_Date,Order_Status
表C包含:
订单 _ 否,行 _ 否,发货 _ 数量,订单 _ 数量
注:
1.表A包含许多波
2.每波可以有很多订单,有多个订单日期和状态
3.订单状态可以是拣货,完成
4.以下是sql:
select z.* from (Select to_char(trunc(A.WAVE_DATE),'DD/MM/YY') As WAVE_DATE , A.WAVE_NUM WAVE_NUM , A.WAVE_DES WAVE_DESC ,sum(C.ord_qty) ORD_QTY ,SUM(case when B.ORD_STS = 'COMPLETE' then C.ship_qty else 0 end) CTN_PICKED ,SUM(case when B.ORD_STS = 'PICKING' then C.ship_qty) else 0 end) CTN_TO_BE_PICKED , to_char(trunc(min(b.ord_date)),'DD/MM/YY') oldest_pick_order_date , trunc(sysdate) - trunc(min(b.ord_date)) oldest_pick_order_age From WAVE_tbl A join ORD_Htbl B on A.COMP = B.COMP and A.ORD_NO = B.ORD_NO join ORD_Dtbl C on C.COMP = B.COMP and C.ORD_NO = B.ORD_NO Where A.COMP = 'ABC' and C.ORD_QTY > 0 and b.cust = 'CustomerA' --and b.ord_date = (select least(ord_date) from ORD_htbl x -- where x.comp=b.comp and x.ord_no=b.ord_no -- and x.ord_sts = 'PICKING') group by trunc(A.WAVE_DATE), A.WAVE_NUM,A.WAVE_DES ) z复制
问题: 我需要报告按波浪、波浪描述、订单数量和挑选纸箱的总和和要挑选的纸箱进行总结,但我也想知道最旧的 “未确认订单” 和年龄 (从订单日期到当前日期的天数)。
如何获得处于状态拣选的订单的最旧的order_date?
当前代码返回最旧的日期,而无需测试订单状态,并且有较旧的订单已完成,因此我想绕过它们并找到最旧的拣选订单。
我尝试了注释掉的代码,但这坚持认为我在组中有ord_date,然后影响我的结果 (我得到同一波的多行,每个不同的订单日期都有中断 :(
感谢您的帮助。
专家解答
您可能想做一些像您在总和中一样的事情: 检查MIN内的状态,仅在状态为选择时返回日期。
例如:
如果这没有帮助,那么请为您的数据发布一个完整的测试用例,包括:
为所有表创建表
这些表的一些插入形式的数据
您期望基于这些数据的输出
例如:
min ( case when B.ORD_STS = 'PICKING' then b.ord_date end )复制
如果这没有帮助,那么请为您的数据发布一个完整的测试用例,包括:
为所有表创建表
这些表的一些插入形式的数据
您期望基于这些数据的输出
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。