Oracle SQL开发需求:筛选Rank1为Fulfilled的订单并判断审批节点
解决方案
首先假设你的订单分析表名为 order_analysis,核心字段包含:order_id(订单ID)、rank(排名)、order_status(订单状态),以及用于标记审批状态的字段(比如project_approved/unit_approved,值为Y表示已审批;或是project_approval_date/unit_approval_date,非空表示已完成审批)。以下是满足需求的单SELECT语句:
基于标志位的判断(如Y/N)
SELECT order_id, rank, order_status, CASE WHEN project_approved = 'Y' OR unit_approved = 'Y' THEN '已通过项目级/单元级审批' ELSE '未经过项目级或单元级审批' END AS approval_result FROM order_analysis WHERE rank = 1 AND order_status = 'Fulfilled';
基于审批日期的判断(非空表示已审批)
SELECT order_id, rank, order_status, CASE WHEN project_approval_date IS NOT NULL OR unit_approval_date IS NOT NULL THEN '已通过项目级/单元级审批' ELSE '未经过项目级或单元级审批' END AS approval_result FROM order_analysis WHERE rank = 1 AND order_status = 'Fulfilled';
若审批记录存于关联表的情况
如果审批信息单独存储在approval_records表(含order_id、approval_level字段),可使用EXISTS子句判断:
SELECT o.order_id, o.rank, o.order_status, CASE WHEN EXISTS ( SELECT 1 FROM approval_records ar WHERE ar.order_id = o.order_id AND ar.approval_level IN ('Project Level', 'Unit Level') ) THEN '已通过项目级/单元级审批' ELSE '未经过项目级或单元级审批' END AS approval_result FROM order_analysis o WHERE o.rank = 1 AND o.order_status = 'Fulfilled';
常见问题排查
你之前用CASE语句出错,大概率是以下原因:
- 误用
AND替代OR:需求是判断任一层级审批完成,而非同时完成 - 筛选条件未放在
WHERE子句:导致判断范围包含了非目标订单 - 空值处理错误:用
=判断空值,正确写法应为IS NOT NULL
内容的提问来源于stack exchange,提问作者yogeshd
相关产品推荐
相关产品推荐

