现阶段sql语句如下select 日期=convert(varchar(10),StatisticsDate,120),sum(字段A) AS 本地有效对话量,sum(字段B) AS 外地有效对话量 
  from DialogueQuantity 
  where StatisticsDate>='2012-03-01' and StatisticsDate<'2012-03-31' and ProjectID =16 group by convert(varchar(10),StatisticsDate,120)
现在有了新要求,现有三个标识列,分别为AllDayStatusDQ、AfternoonStatusDQ 、MorningStatusDQ   这三个列都是bit类型,默认值为false。
要求如下:
1.当 AllDayStatusDQ='True' 时,汇总【字段A】和【字段B】(也就是汇总上面sql语句中那两个字段)
2.当 AllDayStatusDQ is null and AfternoonStatusDQ = 'True'时,汇总【字段C】和【字段D】
3.当AllDayStatusDQ is null and AfternoonStatusDQ is null and MorningStatusDQ='True'时,汇总【字段E】和【字段F】注:【字段A】~【字段B】汇总过程中,如果碰到NULL 转化成0即可
请问应该如何更改这条sql语句以达到我的目的?

解决方案 »

  1.   


    日期                   全天标识            下午标示           上午标识         全天值一     全天值二      下午值一     下午值二     上午值一    上午值二
    2012-02-24          true                  NULL                 ture                  1                    2                  3                    4                 5                  6
    2012-02-25          NULL                 NULL                true                 7                    8                  9                  10                 11               12
    2012-02-26           fasle                 NULL                 true                 13                 14                 15                16                 17               18
    2012-02-26           NULL                true                   true                 19                  20                21                22                  23               24
    2012-02-27           true                  true                   true                25                  26                27                 28                 29               30
    2012-02-25          NULL                true                  true                  31                  32                 33                 34                 35               36
    2012-02-24          NULL                true                  NULL                 37                   38              39                 40                41                42想要的结果日期                             值一汇总          值二汇总
    2012-02-24                    40                  42          
    2012-02-25                     44                  46     --第一行结果的原因: 值一汇总=第一行的【全天值一】+最后一行的【下午值一】=1+39=40       值二汇总=2+40=42
     --第二行结果原因: 11+33=44      12+34=46注:说白了,那三个标识列的组合我们只考虑三种 就是如下
    1.全天标识='True'  : 这种情况下只要去 汇总  【全天值一】  和   【全天值二  】 就可以了  至于其它两个标识是什么可以无视
    2.全天标识为NULL   并且  下午标识为 'True'时: 这种情况下只去汇总 【下午值一】 和 【下午值二】 就可以了, 上午标识列是什么可以无视
    3.全天标识为NULL   并且 下午标识为NULL 并且  上午标识为 'True'时:  这种情况  汇总【上午值一】和【上午值二】就可以了
      

  2.   

    好乱 我再发一遍测试数据日期        全天标识  下午标示   上午标识   全天值一   全天值二   下午值一   下午值二   上午值一    上午值二
    2012-02-24   true      NULL        ture      1            2         3          4            5          6
    2012-02-25   NULL      NULL        true      7            8         9          10          11         12
    2012-02-26   fasle     NULL        true     13            14        15         16          17         18
    2012-02-26   NULL      true        true     19            20        21         22          23         24
    2012-02-27   true      true        true     25            26        27         28          29         30
    2012-02-25   NULL      true        true     31            32        33         34          35         36
    2012-02-24   NULL      true        NULL     37            38        39         40          41         42
      

  3.   


    --> 测试数据:[test]
    if object_id('[test]') is not null 
    drop table [test]
    create table [test](
    [日期] date,
    [全天标识] varchar(5),
    [下午标示] varchar(4),
    [上午标识] varchar(4),
    [全天值一] int,
    [全天值二] int,
    [下午值一] int,
    [下午值二] int,
    [上午值一] int,
    [上午值二] int
    )
    insert [test]
    select '2012-02-24','true',null,'ture',1,2,3,4,5,6 union all
    select '2012-02-25',null,null,'true',7,8,9,10,11,12 union all
    select '2012-02-26','fasle',null,'true',13,14,15,16,17,18 union all
    select '2012-02-26',null,'true','true',19,20,21,22,23,24 union all
    select '2012-02-27','true','true','true',25,26,27,28,29,30 union all
    select '2012-02-25',null,'true','true',31,32,33,34,35,36 union all
    select '2012-02-24',null,'true',null,37,38,39,40,41,42select 
          [日期],
          SUM(case 
              when [全天标识]='true' then [全天值一]
              when [全天标识] is null and [上午标识] ='true' then [上午值一]
              when [全天标识] is null and [下午标示] ='true' then [下午值一]
              else 0 end) as  值一汇总,
              
           SUM(case 
              when [全天标识]='true' then [全天值二]
              when [全天标识] is null and [上午标识] ='true' then [上午值二]
              when [全天标识] is null and [下午标示] ='true' then [下午值二]
              else 0 end) as  值二汇总
    from 
        [test]
    group by 
         [日期]
     
    /*
    日期 值一汇总 值二汇总
    2012-02-24 40 42
    2012-02-25 46 48
    2012-02-26 23 24
    2012-02-27 25 26
    */有啥问题自己改改,思路就这样,有点忙了