日期:2014-05-18  浏览次数:20520 次

关于统计汇总的疑问
统计是按日统计的,最后有个总计功能,把这个月所有的都做个总计

数据是类似这样的:

日期 销量 价格
2012-01-01 100 5
2012-01-02 150 10
2012-01-03 175 20
2012-01-04 200 30

查询出的表格是这样的:

日期 销售额
2012-01-01 500
2012-01-02 1500
2012-01-03 3500
2012-01-04 6000
总计 11500

能不能让数据库查询结果一次性就返回1~4号4天的结果和这4天的总计

总不可能程序里面写个循环,然后里面一个个查吧..我晕死

真的没啥思路了





------解决方案--------------------
SQL code
create table tb(日期 datetime , 产地 varchar(10))
insert into tb values('2012-01-01 0:05:35', 'CN')
insert into tb values('2012-01-01 0:07:35', 'CN')   
insert into tb values('2012-01-01 1:09:35', 'US')
insert into tb values('2012-01-01 4:05:35', 'CN')
insert into tb values('2012-01-02 0:06:35', 'US')
insert into tb values('2012-01-02 0:07:35', 'US')
insert into tb values('2012-01-03 5:07:43', 'CN')
insert into tb values('2012-01-03 0:06:35', 'US')
insert into tb values('2012-01-04 6:02:52', 'US')  
go

select convert(varchar(10),日期,120) 日期, 
       count(1) [All],
       sum(case when 产地 = 'US' then 1 else 0 end) [US],
       sum(case when 产地 = 'CN' then 1 else 0 end) [CN]
from tb
group by convert(varchar(10),日期,120)
/*
日期         All         US          CN          
---------- ----------- ----------- ----------- 
2012-01-01 4           1           3
2012-01-02 2           2           0
2012-01-03 2           1           1
2012-01-04 1           1           0

(所影响的行数为 4 行)
*/


select convert(varchar(10),日期,120) 日期, 
       count(1) [All],
       sum(case when 产地 = 'US' then 1 else 0 end) [US],
       sum(case when 产地 = 'CN' then 1 else 0 end) [CN]
from tb
group by convert(varchar(10),日期,120)
union all
select '合计' , 
       count(1) [All],
       sum(case when 产地 = 'US' then 1 else 0 end) [US],
       sum(case when 产地 = 'CN' then 1 else 0 end) [CN]
from tb
/*
日期         All         US          CN          
---------- ----------- ----------- ----------- 
2012-01-01 4           1           3
2012-01-02 2           2           0
2012-01-03 2           1           1
2012-01-04 1           1           0
合计         9           5           4

(所影响的行数为 5 行)
*/

drop table tb