You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:42:16