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

Oracle SQL使用CASE语句查询三类无效订单的实现方案

正确SQL实现方案

实现思路

三个无效判定条件互相独立,同一订单可能同时满足多个条件,推荐使用UNION ALL拼接三个条件的查询结果,确保不会漏匹配任何无效场景。

完整SQL代码

-- 条件1:支付类型为货到付款
SELECT 
    cus_no,
    order_num,
    'This order does not qualify for CoD' AS comments
FROM orders
WHERE pay_type = 'Cash on Delivery'

UNION ALL

-- 条件2:MFC字段非空
SELECT 
    cus_no,
    order_num,
    'This order can not be an MFC' AS comments
FROM orders
WHERE MFC IS NOT NULL

UNION ALL

-- 条件3:商品编号不在有效期内的允许售卖列表中
SELECT 
    cus_no,
    order_num,
    'Non listed items can not be ordered' AS comments
FROM orders
WHERE prod_no NOT IN (
    SELECT field_value
    FROM config_check
    WHERE check_type = 'Invalid Orders Check'
      AND sysdate BETWEEN start_date AND end_date
      AND field_value IS NOT NULL -- 避免空值导致NOT IN匹配异常
)

验证说明

测试数据中Invalid Orders Check类型的配置有效期均为2021年,若当前系统时间已超出该范围,第三个条件的子查询会返回空列表,所有订单都会命中第三个条件。如果要验证prod_no=1110的订单匹配效果,可将第三个条件中的sysdate替换为DATE'2021-11-20',即可看到该订单正常返回。

单条返回适配

如果要求每个订单仅返回一条记录,多个条件同时满足时按优先级取最先匹配的结果,可使用CASE WHEN写法:

SELECT 
    cus_no,
    order_num,
    CASE 
        WHEN pay_type = 'Cash on Delivery' THEN 'This order does not qualify for CoD'
        WHEN MFC IS NOT NULL THEN 'This order can not be an MFC'
        WHEN prod_no NOT IN (
            SELECT field_value
            FROM config_check
            WHERE check_type = 'Invalid Orders Check'
              AND sysdate BETWEEN start_date AND end_date
              AND field_value IS NOT NULL
        ) THEN 'Non listed items can not be ordered'
    END AS comments
FROM orders
WHERE 
    pay_type = 'Cash on Delivery'
    OR MFC IS NOT NULL
    OR prod_no NOT IN (
        SELECT field_value
        FROM config_check
        WHERE check_type = 'Invalid Orders Check'
          AND sysdate BETWEEN start_date AND end_date
          AND field_value IS NOT NULL
    )

内容的提问来源于stack exchange,提问作者Arty155

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:45:03