求助:一般情况按年分组,特殊年份按指定日期分组,SELECT语句怎么写?

bestxy 2019-04-27 02:11:23
表中有个字段为“日期”,如下:

日期
-------
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至年底”两个期间的数据。

请问可以实现吗?
...全文
200 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wildwolv 2019-05-05
  • 打赏
  • 举报
回复
引用 1 楼 wildwolv 的回复:
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), sum(case when 日期>=to_date('2017-5-1','yyyy-mm-dd') then 要统计额值 else 0) …… from 表名 where Year(日期) = 2017
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
wildwolv 2019-05-05
  • 打赏
  • 举报
回复
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), sum(case when 日期>=to_date('2017-5-1','yyyy-mm-dd') then 要统计额值 else 0) …… from 表名 where Year(日期) = 2017
nayi_224 2019-05-05
  • 打赏
  • 举报
回复
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)

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧