您的位置:首页 > 数据库

SQL:给查询添加一个合计行

2009-11-22 21:24 357 查看
.数据表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

Create table #t_test(
id int not null,
emp_id int not null,
product_id int not null,
qty int not null
)
insert into #t_test values(1,01,001,200)
insert into #t_test values(2,01,002,300)
insert into #t_test values(3,01,002,400)
insert into #t_test values(4,02,001,400)
insert into #t_test values(5,02,002,500)

select *
from #t_test

2.需要得到的结果

需要得到类似下面的结果

--------------------------------------

emp_id qty

01 900

02 900

合计 1800

--------------------------------------

大家看到了,这里加上了一个合计列

参考sql语句如下

-- for MS SQL Server 2005
select isnull(CONVERT(varchar(20), emp_id),'Total') as 'emp_id'
,sum(qty) as 'qty_Total'
from #t_test
group by emp_id
with rollup

查询的结果如下所示

emp_id qty_Total

1     900
2     900
Total   1800

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为数据库本身有的行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐