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

SQL CASE语句多值判断问题:识别同一列中的Pre/Post及双订单

问题分析

你的查询存在两个核心问题:

  1. CASE逻辑错误:单条记录的Order_ID不可能同时属于PreOrder和PostOrder的编号集合,所以第三个WHEN条件永远不会触发。
  2. GROUP BY用法违规:你按Cust_ID分组,但SELECT中直接引用了未聚合的Order_ID,这不符合SQL的分组规则,会导致结果混乱。
解决方案

要实现需求,需要先统计每个客户是否同时拥有Pre和Post类型的订单,再根据统计结果返回对应标签。具体SQL如下:

SELECT 
    Cust.Cust_ID,
    CASE
        WHEN has_pre = 1 AND has_post = 1 THEN 'BothOrders'
        WHEN has_pre = 1 THEN 'Pre'
        WHEN has_post = 1 THEN 'Post'
        ELSE NULL -- 无匹配订单时返回NULL,可根据需求调整
    END AS Orders
FROM (
    SELECT 
        Cust_ID,
        -- 标记是否存在PreOrder订单
        MAX(CASE WHEN Order_ID IN ('154','3042000103','3042000099') THEN 1 ELSE 0 END) AS has_pre,
        -- 标记是否存在PostOrder订单
        MAX(CASE WHEN Order_ID IN ('30400010112','3042000104') THEN 1 ELSE 0 END) AS has_post
    FROM Customer
    GROUP BY Cust_ID
) AS cust_order_summary
代码说明
  • 子查询cust_order_summary:对每个客户分组,用MAX()聚合函数判断该客户是否存在Pre/Post类型的订单(只要有一条匹配,就返回1)。
  • 外层CASE:根据子查询的标记组合返回结果,优先判断同时拥有两种订单的情况,避免被单一类型的条件覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:45:54