数据如下表所示.返回数据要求:
1) 现要按照月分组, 统计出每月 ArchiveType 类型为A,BB,CCC ,value的总和
2) 按季度 和 年份请高手指教。 dCreateDate, ArchiveType, dTotalValue
-----------------------------------------------
2009-08-27 00:00:00 A 11368.00
2009-08-20 00:00:00 A 3021.00
2009-08-20 00:00:00 A 9434.00
2009-08-20 00:00:00 A 11483.00
2009-08-19 00:00:00 A 19559.00
2009-08-17 00:00:00 A 21358.00
2009-08-26 00:00:00 BB 3021.00
2009-09-01 00:00:00 CCC 29445.00
2009-08-11 00:00:00 A 19952.00
2009-08-11 00:00:00 A 45832.00
2009-08-07 00:00:00 A 102887.00
2009-08-07 00:00:00 A 196319.00
2009-08-07 00:00:00 A 35260.00
2009-09-01 00:00:00 BB 24600.00
2009-09-01 00:00:00 CCC 19068.00
2009-07-16 00:00:00 A 36240.00
2009-07-10 00:00:00 CCC 6700.00
2009-07-10 00:00:00 CCC 11740.00
2009-07-06 00:00:00 BB 48000.00
2009-07-06 00:00:00 A 76000.00
2009-06-29 00:00:00 CCC 3715.00
2009-06-29 00:00:00 BB 1813.00
2009-06-29 00:00:00 CCC 5226.00
2009-06-29 00:00:00 CCC 32480.00
2009-06-29 00:00:00 CCC 41513.00
2009-06-15 00:00:00 CCC 17500.00
2009-06-15 00:00:00 CCC 24625.00
2009-06-15 00:00:00 CCC 3600.00
2009-06-15 00:00:00 CCC 38160.00
2009-06-08 00:00:00 A 10000.00
2009-05-26 00:00:00 CCC 4120.00
2009-05-26 00:00:00 BB 33360.00
2009-05-26 00:00:00 BB 54600.00
2009-05-22 00:00:00 BB 25000.00
2009-05-22 00:00:00 A 108000.00
2009-05-22 00:00:00 A 62700.00
2009-05-22 00:00:00 CCC 50000.00
2009-05-22 00:00:00 CCC 45000.00
2009-05-22 00:00:00 BB 4500.00
2009-04-15 00:00:00 CCC 28814.00
2009-04-15 00:00:00 CCC 2800.00
2009-03-27 00:00:00 CCC 45000.00
2009-03-27 00:00:00 CCC 181000.00
2009-03-27 00:00:00 CCC 80000.00
2009-03-25 00:00:00 CCC 142835.00
2009-03-25 00:00:00 CCC 45348.00
2009-03-25 00:00:00 CCC 43499.00
2009-03-25 00:00:00 CCC 30091.00
2009-03-25 00:00:00 CCC 68315.00
2009-03-18 00:00:00 BB 3540.00
1) 现要按照月分组, 统计出每月 ArchiveType 类型为A,BB,CCC ,value的总和
2) 按季度 和 年份请高手指教。 dCreateDate, ArchiveType, dTotalValue
-----------------------------------------------
2009-08-27 00:00:00 A 11368.00
2009-08-20 00:00:00 A 3021.00
2009-08-20 00:00:00 A 9434.00
2009-08-20 00:00:00 A 11483.00
2009-08-19 00:00:00 A 19559.00
2009-08-17 00:00:00 A 21358.00
2009-08-26 00:00:00 BB 3021.00
2009-09-01 00:00:00 CCC 29445.00
2009-08-11 00:00:00 A 19952.00
2009-08-11 00:00:00 A 45832.00
2009-08-07 00:00:00 A 102887.00
2009-08-07 00:00:00 A 196319.00
2009-08-07 00:00:00 A 35260.00
2009-09-01 00:00:00 BB 24600.00
2009-09-01 00:00:00 CCC 19068.00
2009-07-16 00:00:00 A 36240.00
2009-07-10 00:00:00 CCC 6700.00
2009-07-10 00:00:00 CCC 11740.00
2009-07-06 00:00:00 BB 48000.00
2009-07-06 00:00:00 A 76000.00
2009-06-29 00:00:00 CCC 3715.00
2009-06-29 00:00:00 BB 1813.00
2009-06-29 00:00:00 CCC 5226.00
2009-06-29 00:00:00 CCC 32480.00
2009-06-29 00:00:00 CCC 41513.00
2009-06-15 00:00:00 CCC 17500.00
2009-06-15 00:00:00 CCC 24625.00
2009-06-15 00:00:00 CCC 3600.00
2009-06-15 00:00:00 CCC 38160.00
2009-06-08 00:00:00 A 10000.00
2009-05-26 00:00:00 CCC 4120.00
2009-05-26 00:00:00 BB 33360.00
2009-05-26 00:00:00 BB 54600.00
2009-05-22 00:00:00 BB 25000.00
2009-05-22 00:00:00 A 108000.00
2009-05-22 00:00:00 A 62700.00
2009-05-22 00:00:00 CCC 50000.00
2009-05-22 00:00:00 CCC 45000.00
2009-05-22 00:00:00 BB 4500.00
2009-04-15 00:00:00 CCC 28814.00
2009-04-15 00:00:00 CCC 2800.00
2009-03-27 00:00:00 CCC 45000.00
2009-03-27 00:00:00 CCC 181000.00
2009-03-27 00:00:00 CCC 80000.00
2009-03-25 00:00:00 CCC 142835.00
2009-03-25 00:00:00 CCC 45348.00
2009-03-25 00:00:00 CCC 43499.00
2009-03-25 00:00:00 CCC 30091.00
2009-03-25 00:00:00 CCC 68315.00
2009-03-18 00:00:00 BB 3540.00
2, group by datepart(q,dCreateDate),year(dCreateDate)
select left(dCreateDate,7) as rq,ArchiveType,sum(dTotalValue) as dTotalValue_sum
from tb group by left(dCreateDate,7),ArchiveType with rollup
多出合计小合总计行数据
--> 测试数据: @t
declare @t table (dCreateDate datetime,ArchiveType varchar(3),dTotalValue numeric(8,2))
insert into @t
select '2009-08-27 00:00:00','A',11368.00 union all
select '2009-08-20 00:00:00','A',3021.00 union all
select '2009-08-20 00:00:00','A',9434.00 union all
select '2009-08-20 00:00:00','A',11483.00 union all
select '2009-08-19 00:00:00','A',19559.00 union all
select '2009-08-17 00:00:00','A',21358.00 union all
select '2009-08-26 00:00:00','BB',3021.00 union all
select '2009-09-01 00:00:00','CCC',29445.00 union all
select '2009-08-11 00:00:00','A',19952.00 union all
select '2009-08-11 00:00:00','A',45832.00 union all
select '2009-08-07 00:00:00','A',102887.00 union all
select '2009-08-07 00:00:00','A',196319.00 union all
select '2009-08-07 00:00:00','A',35260.00 union all
select '2009-09-01 00:00:00','BB',24600.00 union all
select '2009-09-01 00:00:00','CCC',19068.00 union all
select '2009-07-16 00:00:00','A',36240.00 union all
select '2009-07-10 00:00:00','CCC',6700.00 union all
select '2009-07-10 00:00:00','CCC',11740.00 union all
select '2009-07-06 00:00:00','BB',48000.00 union all
select '2009-07-06 00:00:00','A',76000.00 union all
select '2009-06-29 00:00:00','CCC',3715.00 union all
select '2009-06-29 00:00:00','BB',1813.00 union all
select '2009-06-29 00:00:00','CCC',5226.00 union all
select '2009-06-29 00:00:00','CCC',32480.00 union all
select '2009-06-29 00:00:00','CCC',41513.00 union all
select '2009-06-15 00:00:00','CCC',17500.00 union all
select '2009-06-15 00:00:00','CCC',24625.00 union all
select '2009-06-15 00:00:00','CCC',3600.00 union all
select '2009-06-15 00:00:00','CCC',38160.00 union all
select '2009-06-08 00:00:00','A',10000.00 union all
select '2009-05-26 00:00:00','CCC',4120.00 union all
select '2009-05-26 00:00:00','BB',33360.00 union all
select '2009-05-26 00:00:00','BB',54600.00 union all
select '2009-05-22 00:00:00','BB',25000.00 union all
select '2009-05-22 00:00:00','A',108000.00 union all
select '2009-05-22 00:00:00','A',62700.00 union all
select '2009-05-22 00:00:00','CCC',50000.00 union all
select '2009-05-22 00:00:00','CCC',45000.00 union all
select '2009-05-22 00:00:00','BB',4500.00 union all
select '2009-04-15 00:00:00','CCC',28814.00 union all
select '2009-04-15 00:00:00','CCC',2800.00 union all
select '2009-03-27 00:00:00','CCC',45000.00 union all
select '2009-03-27 00:00:00','CCC',181000.00 union all
select '2009-03-27 00:00:00','CCC',80000.00 union all
select '2009-03-25 00:00:00','CCC',142835.00 union all
select '2009-03-25 00:00:00','CCC',45348.00 union all
select '2009-03-25 00:00:00','CCC',43499.00 union all
select '2009-03-25 00:00:00','CCC',30091.00 union all
select '2009-03-25 00:00:00','CCC',68315.00 union all
select '2009-03-18 00:00:00','BB',3540.00select YEAR(dCreateDate),MONTH(dCreateDate)%3,MONTH(dCreateDate),ArchiveType,SUM(dTotalValue) from @t
group by
YEAR(dCreateDate),--按年统计
MONTH(dCreateDate)%3,--按季度统计
MONTH(dCreateDate),--按月共计
ArchiveType --按类型统计
WITH ROLLUP----结果:
年份 季度 月份 类型 数量
2009 0 3 BB 3540.00
2009 0 3 CCC 636088.00
2009 0 3 NULL 639628.00
2009 0 6 A 10000.00
2009 0 6 BB 1813.00
2009 0 6 CCC 166819.00
2009 0 6 NULL 178632.00
2009 0 9 BB 24600.00
2009 0 9 CCC 48513.00
2009 0 9 NULL 73113.00
2009 0 NULL NULL 891373.00
2009 1 4 CCC 31614.00
2009 1 4 NULL 31614.00
2009 1 7 A 112240.00
2009 1 7 BB 48000.00
2009 1 7 CCC 18440.00
2009 1 7 NULL 178680.00
2009 1 NULL NULL 210294.00
2009 2 5 A 170700.00
2009 2 5 BB 117460.00
2009 2 5 CCC 99120.00
2009 2 5 NULL 387280.00
2009 2 8 A 476473.00
2009 2 8 BB 3021.00
2009 2 8 NULL 479494.00
2009 2 NULL NULL 866774.00
2009 NULL NULL NULL 1968441.00
NULL NULL NULL NULL 1968441.00
--> 测试数据:[TB]
if object_id('[TB]') is not null drop table [TB]
create table [TB]([dCreateDate] datetime,[ArchiveType] varchar(3),[dTotalValue] numeric(8,2))
insert [TB]
select '2009-08-27 00:00:00','A',11368.00 union all
select '2009-08-20 00:00:00','A',3021.00 union all
select '2009-08-20 00:00:00','A',11483.00 union all
select '2009-08-07 00:00:00','A',102887.00 union all
select '2009-08-07 00:00:00','A',35260.00 union all
select '2009-09-01 00:00:00','BB',24600.00 union all
select '2009-07-06 00:00:00','A',76000.00 union all
select '2009-06-29 00:00:00','CCC',3715.00 union all
select '2009-06-29 00:00:00','BB',1813.00 union all
select '2009-06-08 00:00:00','A',10000.00 union all
select '2009-05-26 00:00:00','CCC',4120.00 union all
select '2009-05-26 00:00:00','BB',33360.00 union all
select '2009-05-22 00:00:00','BB',4500.00 union all
select '2009-04-15 00:00:00','CCC',28814.00 union all
select '2009-03-27 00:00:00','CCC',181000.00 union all
select '2009-03-25 00:00:00','CCC',68315.00 union all
select '2009-03-18 00:00:00','BB',3540.00--统计月的
select [dCreateDate]=(case when grouping(convert(varchar(7),[dCreateDate],120))=1 then '总计' else convert(varchar(7),[dCreateDate],120) end ),
[ArchiveType]=isnull(case when grouping([ArchiveType])=1 then convert(varchar(7),[dCreateDate],120)+'小计' else [ArchiveType] end,'总计'),
[dTotalValue]=sum([dTotalValue])
from TB
group by convert(varchar(7),[dCreateDate],120),[ArchiveType] with rollup--按季度 select [dCreateDate]=case when grouping(datename(q,[dCreateDate]))=1 then '总计' else datename(q,[dCreateDate]) end,
[ArchiveType]=isnull(case when grouping([ArchiveType])=1 then datename(q,[dCreateDate])+'小计' else [ArchiveType] end,''),
[dTotalValue]=sum([dTotalValue])
from TB
group by datename(q,[dCreateDate]),[ArchiveType] with rollupdrop table TB
datepart(month,getdate())月
datepart(day,getdate())日
datepart(quarter,getdate())季度
datepart(weed,getdate())周当然可以用datename,convertwith rollup 或 with cube(汇总内容比rollup多些)
2009-08 A 总值数
2009-08 B 总值数
2009-08 C 总值数
2009-09 A 总值数
2009-09 B 总值数
2009-09 C 总值数
......
你出来的数据不全对。
统计的结果应该是: 月份 类型 总额
2009-08 A 总值数
2009-08 B 总值数
2009-08 C 总值数
2009-09 A 总值数
2009-09 B 总值数
2009-09 C 总值数
......
而你写的,最高结果有两条的可能
你好,你出来的数据怎么会有: 类似 这样的数据呢
2009 1 4 NULL 31614.00我要的结果是, 每月的A,BB,CCC 的统计数据。 没有的用 0.00 取代着。月份 类型 总额
2009-08 A 总值数
2009-08 B 总值数
2009-08 C 总值数
2009-09 A 总值数
2009-09 B 总值数
2009-09 C 总值数