求助:基于条件求和实现SQL表结构转换的查询语句
解决方案
你可以使用条件聚合(结合SUM()和CASE表达式)实现需求,通过operation_id和order_id分组后,分别计算不同条件下的qty总和。
完整SQL查询语句
SELECT operation_id, order_id, SUM(CASE WHEN detail_type = 'glued' AND qty_type = 'ready' THEN qty ELSE 0 END) AS qty_glued_ready, SUM(CASE WHEN detail_type = 'unglued' AND qty_type = 'ready' THEN qty ELSE 0 END) AS qty_unglued_ready, SUM(CASE WHEN detail_type = 'glued' AND qty_type = 'done' THEN qty ELSE 0 END) AS qty_glued_done, SUM(CASE WHEN detail_type = 'unglued' AND qty_type = 'done' THEN qty ELSE 0 END) AS qty_unglued_done FROM your_table_name -- 替换为你的实际表名 GROUP BY operation_id, order_id;
逻辑说明
CASE表达式判断每行数据是否符合指定条件,符合则返回对应qty值,否则返回0SUM()函数对分组内符合条件的qty值求和GROUP BY operation_id, order_id确保结果按这两个字段分组聚合
执行结果说明
针对你提供的原始数据,执行后会得到:
| operation_id | order_id | qty_glued_ready | qty_unglued_ready | qty_glued_done | qty_unglued_done |
|---|---|---|---|---|---|
| 1 | 1 | 240 | 199 | 100 | 0 |
| 1 | 2 | 50 | 0 | 0 | 0 |
注:你给出的目标表中qty_glued_done和qty_unglued_done的值为10,可能是笔误,按原始数据计算qty_glued_done应为100,qty_unglued_done为0。
内容的提问来源于stack exchange,提问作者froxas
相关产品推荐
相关产品推荐

