表中有个字段为“日期”,如下:日期
-------
2016-2-3
2016-4-5
2017-8-9
2017-10-11
2018-3-4
…我知道,按年份分组统计,语句是这样的:SELECT Year(日期) AS 年份, ……
FROM 表名
……
GROUP Year(日期) 现在的需求是,如果是一般的年份,还是跟上面一样按年份分组统计,如果 年份=2017 ,就要分别统计“2017-05-01以前” 和 “2017-05-01至年底”两个期间的数据。请问可以实现吗?

解决方案 »

  1.   

    SELECT Year(日期) AS 年份, ……
    FROM 表名
    where Year(日期)  <> 2017
    ……
    GROUP by Year(日期) union allselect 
    sum(case when 日期<to_date('2017-5-1','yyyy-mm-dd') then 要统计额值 else 0),
    sum(case when 日期>=to_date('2017-5-1','yyyy-mm-dd') then 要统计额值 else 0)
    ……
    from 表名 where Year(日期)  = 2017
      

  2.   

    SELECT Year(日期) AS 年份, ……
    FROM 表名
    where Year(日期)  <> 2017
    ……
    GROUP by Year(日期) union all select 
     sum(case when 日期<to_date('2017-5-1','yyyy-mm-dd') then 要统计额值 else 0 end),
     sum(case when 日期>=to_date('2017-5-1','yyyy-mm-dd') then 要统计额值 else 0 end)
    ……
    from 表名 where Year(日期)  = 2017 
      

  3.   

    group by decode(to_char(to_date(t1.dat, 'yyyy-mm-dd'), 'yyyy'), '2017', 
                        to_char(sign(to_date(t1.dat, 'yyyy-mm-dd') - to_date('20170501', 'yyyymmdd') + 1)), 
                        t1.dat)