Oracle统计跳过特定状态的订单数(适配OBIEE Answers)
解决方案
要统计从未出现指定状态的独立订单数量,需利用窗口函数结合条件判断,确保计数的是独立订单而非单条状态记录,适配OBIEE的SQL写法如下:
SELECT COUNT(DISTINCT CASE WHEN SUM(CASE WHEN STATUS LIKE '%Approved%' THEN 1 ELSE 0 END) OVER (PARTITION BY ORDER_ID) = 0 THEN ORDER_ID END) AS NOT_APPROVED, COUNT(DISTINCT CASE WHEN SUM(CASE WHEN STATUS LIKE '%Dispatched%' THEN 1 ELSE 0 END) OVER (PARTITION BY ORDER_ID) = 0 THEN ORDER_ID END) AS NOT_DISPATCHED FROM Orders FETCH FIRST 1 ROW ONLY
关键逻辑说明:
SUM(...) OVER (PARTITION BY ORDER_ID):按订单ID分组,统计每个订单是否出现过目标状态(出现则求和结果≥1,未出现则为0)CASE WHEN ... THEN ORDER_ID END:仅当订单从未出现目标状态时,返回该订单IDCOUNT(DISTINCT ...):对符合条件的订单ID去重计数,得到独立订单总数FETCH FIRST 1 ROW ONLY:确保最终仅返回一行汇总结果(所有行的计算结果一致,取任意一行即可)
内容的提问来源于stack exchange,提问作者yogeshd
相关产品推荐
相关产品推荐

