从客户的订单中查找拒绝的物品

时间:2019-05-15 23:16:41

标签: sql sql-server-2012

我需要生成订单被拒项目的报告,当系统完成订单处理完毕并且必须考虑停止处理订单的条件是,我必须这样做: / p>

  1. 流程中订单的状态等于或大于600
  2. 订单中的所有商品均被拒绝,并且处于999状态

我想做一个考虑前两个条件的SQL查询,以便在系统不再处理订单时将订单中的被拒物品带给我。

场景示例:

enter image description here

所以,我正在尝试通过以下方式

select * from order_detail_status 
where  order_number = 'OR_001'
and  process_status= '999'
and process_id = (select max(process_id) from  configuracion.order_detail_status where  order_number = 'OR_001' and process_status >= 600)

如果仅存在方案1,这将起作用,但是对于方案2,请求永远不会达到该状态,因此我尝试添加第二个条件:

or (select distinct (process_status) from configuracion.order_detail_status where order_number = 'OR_002' ) = '999'

在第二种情况下,我想指出订单的所有记录都被拒绝,状态为999,但这对我不起作用,有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果要查找所有项目的process_status为999的订单,请尝试执行以下操作:

SELECT order_number, MIN(process_status) AS minps, MAX(process_status) AS maxps
FROM order_detail_status 
GROUP BY order_number
HAVING minps=maxps AND minps=999

按顺序对行进行分组,然后执行min()和max()可以为订单提供最高和最低状态。如果它们匹配,则订单中所有项目都只有一种状态。如果单个状态为999(或> 600),那么您就有了答案。

HAVING就像WHERE条件,但在分组完成后仍会运行。

结果:

OR_002  999 999