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

重复物料编号统一显示‘Working on It’状态的SQL实现问题

解决方案

首先修正你的SQL逻辑,解决状态未统一的问题:

SELECT
    SUBSTRING(item, 1, 4) AS Item,
    CASE 
        WHEN has_working = 1 THEN 'Working on It'
        ELSE [Eng Status]
    END AS Status
FROM (
    SELECT
        item,
        [Eng Status],
        -- 按物料编号分组,标记是否存在"Working on It"状态
        MAX(CASE WHEN [Eng Status] = 'Working on It' THEN 1 ELSE 0 END) 
            OVER (PARTITION BY SUBSTRING(item, 1, 4)) AS has_working
    FROM tbl
) AS sub_query

如果需要去重(避免同一物料+状态的重复记录),可以在外层添加DISTINCT:

SELECT DISTINCT
    SUBSTRING(item, 1, 4) AS Item,
    CASE 
        WHEN has_working = 1 THEN 'Working on It'
        ELSE [Eng Status]
    END AS Status
FROM (
    SELECT
        item,
        [Eng Status],
        MAX(CASE WHEN [Eng Status] = 'Working on It' THEN 1 ELSE 0 END) 
            OVER (PARTITION BY SUBSTRING(item, 1, 4)) AS has_working
    FROM tbl
) AS sub_query

原SQL的问题分析

  1. 别名引用限制:部分数据库(如SQL Server)不允许在窗口函数的PARTITION BY中直接引用SELECT列表的别名Item,必须使用实际的字段表达式SUBSTRING(item, 1, 4)。
  2. 状态替换不彻底:原SQL的ELSE分支直接返回原始状态[Eng Status],导致即使物料存在"Working on It"状态,原本的"On Hold"记录依然会保留该状态,加上DISTINCT后还是会出现两种状态,和原数据一致。
  3. 分层处理缺失:先通过子查询计算每个物料的状态标记,再在外层统一替换所有该物料的状态,才能保证同一物料的所有记录状态统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:45:41