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

SQL中如何根据PRODUCTIONORDERSTATUS为SCHEDULEDQUANTITY条件赋值

问题背景

需要在CTE中实现基于PRODUCTIONORDERSTATUS列值的SCHEDULEDQUANTITY计算逻辑:

  • PRODUCTIONORDERSTATUS取值为3或4时,返回SCHEDULEDQUANTITY原始值
  • PRODUCTIONORDERSTATUS为其他值时,返回0
    原有实现代码未得到预期结果。
原代码存在的问题
  • CASE语法不符合SQL规范:WHEN分支后仅支持写判断条件,THEN后直接写返回值,不支持列名=值的赋值写法
  • 判断逻辑存在逻辑漏洞:原条件PRODUCTIONORDERSTATUS != 3 OR PRODUCTIONORDERSTATUS !=4对所有可能的取值都成立(例如值为3时满足!=4,值为4时满足!=3),会导致所有行都触发第一个分支返回0
  • 聚合顺序错误:需要先逐行判断状态、计算单行列值,再做分组聚合,直接聚合原始值再单独计算CASE列既不符合业务逻辑,还会因为SELECT列未包含在GROUP BY或聚合函数中触发语法报错
  • CTE字段映射错误:CTE声明了3个输出字段,但SELECT子句中SUM计算的原始数量列未指定别名,无法和CTE字段对应。
修正后的代码
POH (ITEMNUMBER, SCHEDULEDQUANTITY, CASE1)
AS
(
    SELECT 
        ITEMNUMBER,
        SUM(SCHEDULEDQUANTITY) AS SCHEDULEDQUANTITY,
        SUM(
            CASE
                WHEN PRODUCTIONORDERSTATUS IN (3, 4) THEN SCHEDULEDQUANTITY
                ELSE 0
            END
        ) AS CASE1
    FROM POH 
    GROUP BY ITEMNUMBER
)

说明:如果不需要保留原始的排产数量总和,可以删掉SELECT子句里的SUM(SCHEDULEDQUANTITY) AS SCHEDULEDQUANTITY这一行,同步删掉CTE定义里对应的SCHEDULEDQUANTITY字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:51:43