1.数据表t_test
id 销售人员id 商品id 数量
id emp_id product_id qty
1 01 001 200
2 01 002 300
2 01 002 400
3 02 001 400
4 02 002 500
2.需要得到的结果
需要得到类似下面的结果
--------------------------------------
emp_id qty
01 900
02 900
合计 1800
--------------------------------------
大家看到了,这里加上了一个合计列
参考sql语句如下
select emp_id,sum(qty) qty
from t_test
group by rollup(emp_id)
查询的结果如下所示
--------------------------------------
emp_id qty
01 900
02 900
1800
--------------------------------------
ok,最后一行显示为空,正确的应该显示为"合计",对上面的sql稍做修改就好了
select nvl(emp_id,'合计') emp_id,sum(qty) qty
from t_test
group by rollup(emp_id)
这样就得到我们要求的结果了
3.负责一点,统计每个销售人员以及商品的数量
--------------------------------------
emp_id product_id qty
01 001 200
01 001 700
01 小计 900
02 001 400
02 002 500
02 小计 900
合计 1800
--------------------------------------
由于要统计合计以及小计,不能简单的用nvl来产生"合计"了,要用grouping函数,来判断者某行是否有rollup产生的合计行,
select
case when grouping(emp_id)=1 and grouping(product_id)=1 then '合计' else emp_id end emp_id,
case when grouping(emp_id)=0 and grouping(product_id)=1 then '小计' else procudt_id end product_id,
sum(qty) qty
from t_test
group by rollup(emp_id,product_id)
注意,grouping(emp_id)=1,说明是有rollup函数生成的行,0为数据库本身有的行
嗯..打完收工,由于是直接在百度空间打的字.如有拼写错误,请自行纠正-_-!!