怎样一条SQL语句统计该年每月的数据个数
先说明一下数据库:Oracle的数据库 我原本向一位老大哥求救,人家用的MySql 最后我上网扒的,自己慢慢写的
这条SQL语句是查询某个区间范围里的月份统计个数 作为记录吧,网上的好多都不好用 ,数据库列的格式是Date类型 至于char类型的我没写,所以也不会,我在底下会把向老大哥请教的也写上
以下语句亲测有效!至于你们要是不好使,请自行了断!
第一种是写的活的,我用FineReport报表,所以有范围值:
select sum(case when EXTRACT(MONTH FROM SIGN_STDT)=01 then 1 else 0 end) as A,
sum(case when EXTRACT(MONTH FROM SIGN_STDT)=02 then 1 else 0 end) as B,
sum(case when EXTRACT(MONTH FROM SIGN_STDT)=03 then 1 else 0 end) as C,
sum(case when EXTRACT(MONTH FROM SIGN_STDT)=04 then 1 else 0 end) as D
中间的一样我就不复制了,有加密一条要分两节复制很麻烦。
from TABLE
where SIGN_STDT
between to_date("2017/11/01","yyyy/mm/dd hh24:mi:ss")
and to_date("2017/11/30","yyyy/mm/dd hh24:mi:ss");
把红色部分的换成你的列名就OK!
//下面这个是查的所有年份为2017年的比较死一些
select sum(case when EXTRACT(MONTH FROM SIGN_STDT)=01 then 1 else 0 end) as A,
sum(case when EXTRACT(MONTH FROM SIGN_STDT)=02 then 1 else 0 end) as B,
sum(case when EXTRACT(MONTH FROM SIGN_STDT)=03 then 1 else 0 end) as C,
sum(case when EXTRACT(MONTH FROM SIGN_STDT)=04 then 1 else 0 end) as D
中间的一样我就不复制了,有加密一条要分两节复制很麻烦。
from TABLE
where EXTRACT(YEAR FROM SIGN_STDT)="2017"
//这个是老大哥写的将年月转成char类型,根据年月来统计,不过因为12个月,假如有几个月没有数据,就会不显示,所以我们公司不让用,也分享给大家