Oracle数据库中如何将两行数据合并为一行?
Oracle合并两行数据为一行的解决方法
嘿,这问题我熟!你现在遇到的是典型的行转列场景——之前用GROUP BY material会按物料分组得到两行,要把它们合并到同一行,用条件聚合就能轻松搞定。
核心思路
放弃按物料分组,改用CASE WHEN配合SUM()函数,分别统计每种物料的资源利用率总和,最终把结果放到同一行的不同列中。
示例SQL
假设你的表结构包含material(物料名称)和utilization_rate(资源利用率)列,那么可以这么写:
SELECT SUM(CASE WHEN material = '物料A' THEN utilization_rate ELSE 0 END) AS 物料A利用率总和, SUM(CASE WHEN material = '物料B' THEN utilization_rate ELSE 0 END) AS 物料B利用率总和 FROM your_table_name;
代码解释
CASE WHEN material = '物料A' THEN utilization_rate ELSE 0 END:遍历每行数据,只保留物料A的利用率值,其他行对应位置记为0- 外层的
SUM()会把所有物料A的利用率累加起来,同理得到物料B的总和 - 最终两个
SUM()的结果会出现在同一行的不同列里,完美匹配你的目标需求
扩展场景:如果有其他维度需要保留
要是你还需要按日期、部门等维度分组(比如统计每天的两种物料利用率总和),只需要把这些维度加到GROUP BY中即可:
SELECT record_date, department, SUM(CASE WHEN material = '物料A' THEN utilization_rate ELSE 0 END) AS 物料A利用率总和, SUM(CASE WHEN material = '物料B' THEN utilization_rate ELSE 0 END) AS 物料B利用率总和 FROM your_table_name GROUP BY record_date, department;
这样就能在每个维度分组下,把两种物料的统计结果合并到同一行啦。
内容的提问来源于stack exchange,提问作者Saksham
相关产品推荐
相关产品推荐

