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

Snowflake SQL中关联两表并使用关联表字段作为WHERE筛选条件的方法

解决方案

你需要通过关联表并在分组后添加筛选条件来实现需求,以下是修正后的SQL语句:

SELECT 
    wt.Wave_No,
    SUM(CASE WHEN wt.Total_Qty != wt.Consumed_Qty THEN 1 ELSE 0 END) AS Partial_Cases,
    COUNT(*) AS Total_Cases,
    -- 处理除数为0的异常情况
    SUM(CASE WHEN wt.Total_Qty != wt.Consumed_Qty THEN 1 ELSE 0 END) / NULLIF(COUNT(*), 0) AS Partial_Case_Percentage,
    wt.Creation_Date,
    wt.Work_Group,
    wt.Work_Area
FROM Wave_Table wt
-- 通过风格编码关联两张表
INNER JOIN Product_Table pt 
    ON wt.Style_No = pt.Product_Style
WHERE 
    wt.Status = '90'
    AND wt.Wave_No >= '20240701024'
    AND wt.Work_Group LIKE '%SOR%'
GROUP BY 
    wt.Wave_No, 
    wt.Creation_Date, 
    wt.Work_Group, 
    wt.Work_Area
-- 筛选出当前波次中Style_Code为A/B/C的记录数大于5的分组
HAVING COUNT(CASE WHEN pt.Style_Code IN ('A', 'B', 'C') THEN 1 END) > 5
ORDER BY wt.Wave_No;

关键说明

  • 使用表别名wt(Wave_Table)和pt(Product_Table)简化代码,避免字段名冲突
  • 采用INNER JOIN确保只保留有对应产品风格匹配的记录;若需保留Wave_Table中无匹配的记录(这类记录会因Style_Code为空被HAVING过滤),可替换为LEFT JOIN
  • HAVING子句用于分组后的筛选,统计每个波次内符合Style_Code IN ('A','B','C')的记录数量,仅保留数量大于5的波次
  • 添加NULLIF(COUNT(*), 0)处理除数为0的情况,避免SQL执行报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 01:52:42