多表关联生成Output Report报表SQL查询结果异常咨询
SQL查询问题排查及修正方案
存在的问题
- CASE WHEN语法错误:你写的SUM逻辑中多了多余的
yield关键字,同时缺少ELSE分支,不满足条件的行返回NULL会导致汇总结果不符合预期。 - GROUP BY规则不匹配:SELECT子句中引用了
l.lot_qty字段,但GROUP BY仅指定了l.Lot_Name,在绝大多数SQL执行环境下会触发语法报错,即使执行成功也可能返回异常的Lot_Qty数值。 - INNER JOIN可能遗漏数据:当前使用INNER JOIN关联三个表,若某批次没有交易记录会直接被过滤,不会出现在最终结果中。
修正后的查询语句
-- Create Table Output_Report SELECT l.lot_name, MAX(l.lot_qty) AS lot_qty, SUM(CASE WHEN ti.txn_type = '1' THEN th.txn_qty ELSE 0 END) AS Yield, SUM(CASE WHEN ti.txn_type = '2' THEN th.txn_qty ELSE 0 END) AS Bubble, SUM(CASE WHEN ti.txn_type = '3' THEN th.txn_qty ELSE 0 END) AS Warping, SUM(CASE WHEN ti.txn_type = '4' THEN th.txn_qty ELSE 0 END) AS Bent FROM lot l LEFT JOIN txn_history th ON l.lot_id = th.lot_id LEFT JOIN txn_info ti ON th.txn_type = ti.txn_type GROUP BY l.Lot_Name
额外注意事项
如果交易类型1-4和四个指标的对应关系是通过Txn_info表的Txn_Name或Txn_grp字段维护的,建议将CASE WHEN的判断条件替换为对应字段的匹配逻辑,避免硬编码交易类型ID带来的维护问题。
内容的提问来源于stack exchange,提问作者lostcoder
相关产品推荐
相关产品推荐

