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

如何按ORDER_CONTRACT_NUMBER分组,正确生成TYPE列?

问题分析

你当前的SQL错误在于同时按ORDER_CONTRACT_NUMBER和PRODUCT CLASS分组,这会导致每个分组内仅包含单个产品类别,COUNT(distinct "PRODUCT CLASS")的结果永远为1,因此所有TYPE都被判定为XX ONLY,完全不符合预期。

解决方案

需要先单独统计每个合同号对应的产品类别总数,再将统计结果与原表关联,以此判断每条记录的TYPE类型:

SELECT 
    t."ORDER_CONTRACT_NUMBER",
    CASE
        WHEN s.class_count > 1 THEN 'MIXED TYPE ' || t."PRODUCT CLASS"
        WHEN s.class_count = 1 THEN t."PRODUCT CLASS" || ' ONLY'
        ELSE NULL
    END AS TYPE
FROM 
    "product_class_Sheet1" t
LEFT JOIN (
    -- 子查询:统计每个合同号下的不同产品类别数量
    SELECT 
        "ORDER_CONTRACT_NUMBER",
        COUNT(DISTINCT "PRODUCT CLASS") AS class_count
    FROM 
        "product_class_Sheet1"
    GROUP BY 
        "ORDER_CONTRACT_NUMBER"
) s ON t."ORDER_CONTRACT_NUMBER" = s."ORDER_CONTRACT_NUMBER"
逻辑说明
  1. 子查询s先按ORDER_CONTRACT_NUMBER分组,计算每个合同号对应的唯一产品类别总数;
  2. 将子查询结果与原表t通过合同号关联,让原表的每一行都能获取到对应合同号的类别总数;
  3. 用CASE WHEN根据类别总数生成TYPE:
    • 总数>1时,标记为MIXED TYPE + 产品类别;
    • 总数=1时,标记为产品类别 + ONLY。

执行该SQL后,输出结果将完全匹配你的期望。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:20:16