数据如下表所示.返回数据要求:
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.   

    1, group by month(dCreateDate)
    2, group by datepart(q,dCreateDate),year(dCreateDate)
      

  2.   

    select left(rq,7) as rq,count(ArchiveType) as  ArchiveType_sum,sum(dTotalValue) as dTotalValue_sum from tb group by left(rq,7)
      

  3.   


    select left(dCreateDate,7) as rq,ArchiveType,sum(dTotalValue) as dTotalValue_sum 
    from tb group by left(dCreateDate,7),ArchiveType with rollup
    多出合计小合总计行数据
      

  4.   


    --> 测试数据: @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
      

  5.   

    抽取了部分数据
    --> 测试数据:[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
      

  6.   

    datepart(year,getdate())年
    datepart(month,getdate())月
    datepart(day,getdate())日
    datepart(quarter,getdate())季度
    datepart(weed,getdate())周当然可以用datename,convertwith rollup 或 with cube(汇总内容比rollup多些)
      

  7.   

    统计的结果犹如:月份    类型  总额
    2009-08 A 总值数
    2009-08 B 总值数
    2009-08 C 总值数
    2009-09 A 总值数
    2009-09 B 总值数
    2009-09 C 总值数
    ......
      

  8.   


    你出来的数据不全对。 
    统计的结果应该是: 月份    类型  总额 
    2009-08 A 总值数 
    2009-08 B 总值数 
    2009-08 C 总值数 
    2009-09 A 总值数 
    2009-09 B 总值数 
    2009-09 C 总值数 
    ...... 
    而你写的,最高结果有两条的可能
      

  9.   


    你好,你出来的数据怎么会有:  类似 这样的数据呢 
    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 总值数