zoukankan      html  css  js  c++  java
  • 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 


     

    查询结果如下:

  • 相关阅读:
    elasticsearch 5.x 系列之七 基于索引别名的零停机升级服务
    Linux 查看系统硬件信息(实例详解)
    linux grep命令详解
    Boot loader: Grub进阶(转)
    Boot loader: Grub入门(转)
    内核模块管理(转)
    Centos启动流程(转)
    Linux 内核启动流程(转)
    程序的运行顺序(转)
    查询进程打开的文件(转)
  • 原文地址:https://www.cnblogs.com/ggll611928/p/6419961.html
Copyright © 2011-2022 走看看