码迷,mamicode.com
首页 > 数据库 > 详细

sql server 查询本年的每个月的数据

时间:2018-10-08 10:21:30      阅读:416      评论:0      收藏:0      [点我收藏+]

标签:分享图片   log   形式   when   case   ref   class   isnull   ediff   

原文:sql server 查询本年的每个月的数据

一、以一行数据的形式,显示本年的12月的数据,本示例以2017年为例,根据CreateDate字段判断,计算总和,查询语句如下:

select sum(case when  datepart(month,CreateDate)=1 then 1 else 0 end) as 1月,
        sum(case when  datepart(month,CreateDate)=2 then 1 else 0 end) as 2月,
        sum(case when  datepart(month,CreateDate)=3 then 1 else 0 end) as 3月,
        sum(case when  datepart(month,CreateDate)=4 then 1 else 0 end) as 4月,
        sum(case when  datepart(month,CreateDate)=5 then 1 else 0 end) as 5月,
        sum(case when  datepart(month,CreateDate)=6 then 1 else 0 end) as 6月,
        sum(case when  datepart(month,CreateDate)=7 then 1 else 0 end) as 7月,
        sum(case when  datepart(month,CreateDate)=8 then 1 else 0 end) as 8月,
        sum(case when  datepart(month,CreateDate)=9 then 1 else 0 end) as 9月,
        sum(case when  datepart(month,CreateDate)=10 then 1 else 0 end) as 10月,
        sum(case when  datepart(month,CreateDate)=11 then 1 else 0 end) as 11月,
        sum(case when  datepart(month,CreateDate)=12 then 1 else 0 end) as 12月
    from MO_Members
    where datepart(year,CreateDate)=2017 

 

查询结果如下:

技术分享图片

 

二、根据当前日期,以列的数据形式,显示本年的12个月的数据,查询语句如下:

    select  date=convert(varchar(10),dateadd(month, 0,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120) 
    union all select date=convert(varchar(10),dateadd(month,1,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120) 
    union all select date=convert(varchar(10),dateadd(month,2,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120) 
    union all select date=convert(varchar(10),dateadd(month,3,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120) 
    union all select date=convert(varchar(10),dateadd(month,4,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120) 
    union all select date=convert(varchar(10),dateadd(month,5,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120) 
    union all select date=convert(varchar(10),dateadd(month,6,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120) 
    union all select date=convert(varchar(10),dateadd(month,7,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120) 
    union all select date=convert(varchar(10),dateadd(month,8,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120) 
    union all select date=convert(varchar(10),dateadd(month,9,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120) 
    union all select date=convert(varchar(10),dateadd(month,10,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120) 
    union all select date=convert(varchar(10),dateadd(month,11,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120) 

 

查询结果如下:
技术分享图片

 

二、具体应用示例:以2017为例,查询语句如下:

with t as 
( 
    select  date=substring(convert(varchar(10),dateadd(month, 0,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2) 
    union all select date=substring(convert(varchar(10),dateadd(month,1,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2) 
    union all select date=substring(convert(varchar(10),dateadd(month,2,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2) 
    union all select date=substring(convert(varchar(10),dateadd(month,3,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2) 
    union all select date=substring(convert(varchar(10),dateadd(month,4,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2) 
    union all select date=substring(convert(varchar(10),dateadd(month,5,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2) 
    union all select date=substring(convert(varchar(10),dateadd(month,6,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2) 
    union all select date=substring(convert(varchar(10),dateadd(month,7,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2) 
    union all select date=substring(convert(varchar(10),dateadd(month,8,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2) 
    union all select date=substring(convert(varchar(10),dateadd(month,9,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2)
    union all select date=substring(convert(varchar(10),dateadd(month,10,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2)
    union all select date=substring(convert(varchar(10),dateadd(month,11,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2) 
)
 select id=ROW_NUMBER()OVER(ORDER BY t1.date),
        date=t1.date+,     
        Counts=sum(isnull(t2.counts,0)) 
        from t t1 
        left join
        (
            select substring(convert(varchar,CreateDate,120),6,2) as CreateDate,count(*) as counts
            from MO_Members  
            where datepart(year,CreateDate)=2017 
            group by substring(convert(varchar,CreateDate,120),6,2)  
        ) t2 
        on t1.date= CreateDate
        group by t1.date 


 

查询结果如下:

技术分享图片

 

sql server 查询本年的每个月的数据

标签:分享图片   log   形式   when   case   ref   class   isnull   ediff   

原文地址:https://www.cnblogs.com/lonelyxmas/p/9752709.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!