Oracle SQL查询:如何按客户逐行汇总总计?
解决Oracle SQL逐行汇总多列数值的问题
你要的是行内列值直接相加,不是分组聚合操作,所以根本不需要用SUM函数(SUM是用来对多行数据分组求和的,不是单行列之间的计算)。
直接把三个列的数值加起来就行,为了避免某列值为NULL导致结果为NULL,可以用NVL函数把NULL转成0,最终的SQL脚本如下:
SELECT customer, NVL(car, 0) + NVL(truck, 0) + NVL("4WD", 0) AS has_item FROM your_table_name;
为什么你之前的方法行不通:
SUM(CASE...):SUM是聚合函数,默认会把所有行当成一个组求和,就算加了GROUP BY也是多此一举——行内直接相加比CASE+SUM的写法简洁太多,而且你之前的CASE逻辑when xx then x else x等于没做任何判断,自然出问题。sum(rownum):rownum是每行的系统行号,sum(rownum)会把所有行的行号累加,和你要的客户车辆总数完全不相关,当然得不到正确结果。
用上面的SQL查询你的示例数据,就能得到你期望的结果:
| customer | has_item |
|---|---|
| Albert | 2 |
| Joe | 1 |
| Catherine | 1 |
| Mark | 4 |
内容的提问来源于stack exchange,提问作者Lizzie
相关产品推荐
相关产品推荐

