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

基于Supp_No与Mat_No校验SQL表Val值一致性的需求

解决方案:基于多键生成Flag列

可以通过窗口函数实现需求,核心思路是按Supp_No分区,计算每个供应商下非空物料编号的唯一性、对应值的唯一性,再根据规则判断Flag。

通用SQL代码

SELECT
    ParNo,
    Supp_No,
    Mat_No,
    Val,
    CASE
        -- 规则3:Mat_No为NULL时标记NA
        WHEN Mat_No IS NULL THEN 'NA'
        -- 先判断当前供应商下是否存在多个不同的非空Mat_No
        WHEN (COUNT(DISTINCT CASE WHEN Mat_No IS NOT NULL THEN Mat_No END) OVER (PARTITION BY Supp_No)) > 1 THEN
            -- 规则1:所有非空Mat_No对应的Val全相同 → Yes
            CASE WHEN COUNT(DISTINCT CASE WHEN Mat_No IS NOT NULL THEN Val END) OVER (PARTITION BY Supp_No) = 1 THEN 'Yes'
                 -- 规则2:Val不全相同 → No
                 ELSE 'No' END
        -- 补充:当前供应商下只有一个非空Mat_No的情况(用户规则未明确,可按需调整)
        ELSE 'No' -- 或改为'NA'/'Yes',根据实际需求调整
    END AS Flag
FROM your_table_name;

代码解释

  1. 窗口函数分区:通过PARTITION BY Supp_No将数据按供应商分组,确保每个分组内的计算仅针对当前供应商。
  2. 计数非空物料的唯一性:COUNT(DISTINCT CASE WHEN Mat_No IS NOT NULL THEN Mat_No END)统计当前供应商下不同的非空物料编号数量,判断是否满足"Mat_No不同"的前提。
  3. 计数值的唯一性:COUNT(DISTINCT CASE WHEN Mat_No IS NOT NULL THEN Val END)统计当前供应商下非空物料对应的值的唯一数量,判断是否全相同。
  4. CASE分支判断:按规则优先级依次判断,先处理Mat_No为NULL的情况,再处理多物料的场景,最后补充单物料的情况。

测试示例

假设表数据如下:

ParNoSupp_NoMat_NoVal
1S1M1100
2S1M2100
3S1NULL200
4S2M3200
5S2M4300
6S3M5500

执行代码后输出:

ParNoSupp_NoMat_NoValFlag
1S1M1100Yes
2S1M2100Yes
3S1NULL200NA
4S2M3200No
5S2M4300No
6S3M5500No

注意事项

  • 部分旧版本数据库可能不支持窗口函数中的COUNT(DISTINCT)(如MySQL 5.x),此时可以先通过子查询分组计算每个供应商的物料数和值数,再关联回原表:
WITH supp_stats AS (
    SELECT
        Supp_No,
        COUNT(DISTINCT Mat_No) AS distinct_mats,
        COUNT(DISTINCT Val) AS distinct_vals
    FROM your_table_name
    WHERE Mat_No IS NOT NULL
    GROUP BY Supp_No
)
SELECT
    t.ParNo,
    t.Supp_No,
    t.Mat_No,
    t.Val,
    CASE
        WHEN t.Mat_No IS NULL THEN 'NA'
        WHEN s.distinct_mats > 1 THEN
            CASE WHEN s.distinct_vals = 1 THEN 'Yes' ELSE 'No' END
        ELSE 'No'
    END AS Flag
FROM your_table_name t
LEFT JOIN supp_stats s ON t.Supp_No = s.Supp_No;

内容的提问来源于stack exchange,提问作者T S Nandakumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:42:01