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
相关产品推荐
相关产品推荐

