zoukankan      html  css  js  c++  java
  • 选择生成日报表,月报表,年报表

    传入参数:

    @Type:类型,是哪一种报表,有year,month,day三种

    @Time:时间 

    根据Type参数分别获取Time的月份数据,日期数据

          declare @Type nvarchar(20) ='year';
        declare @Time DateTime =getdate();
     SELECT  distinct 
       case @Type when 'year' then format(dateadd(mm,number,@Time),'MM月')
            when 'month' then format(dateadd(dd,number,@Time),'dd日')
            else format(dateadd(dd,number,@Time),'dd日') 
            end DT
        FROM master..spt_values
            WHERE type='P' and  ((@Type='day' and number<1) or (@Type!='day' and number<50))

    年的时候显示12个月

    月的时候显示该月的天数

    日的时候就显示该天

    注意上面的日的时候,进行判断,number<1

    先查出这个,然后与数据库中表left join

      declare @Type nvarchar(20) ='month';
        declare @Time DateTime =getdate();
      select 
           case @Type when 'year' then format(CreateTime,'MM月')
            when 'month' then format(CreateTime,'dd日')
            else format(CreateTime,'dd日') 
            end DT2,Sum
       (
          isnull(ElectricalLaborHour,0)+
          isnull(ElectricalParts,0)+
          isnull(SheetSprayLaborHour,0)+
          isnull(SheetSprayParts,0)+
          isnull(SheetSprayTransLaborHour,0)+
          isnull(OilChangeLaborHour,0)+
          isnull(OilChangeParts,0)+
          isnull(WarrantyLaborHour,0)+
          isnull(WarrantyParts,0)+
          isnull(WarrantyTransLaborHour,0)+
          isnull(InternalElectricalLaborHour,0)+
          isnull(InternalParts,0)+
          isnull(InternalSheetSprayLaborHour,0)) as Total from T_DMSMaintenance where IsDelete=0 and 
           ((@Type='year' and datepart(yyyy,CreateTime)=datepart(yyyy,@Time)) or
       (@Type='month' and format(CreateTime,'yyyy年MM月')=format(@Time,'yyyy年MM月')) or
      (@Type='day' and format(CreateTime,'yyyy-MM-dd')=format(@Time,'yyyy-MM-dd')))
       group by  case @Type when 'year' then format(CreateTime,'MM月')
            when 'month' then format(CreateTime,'dd日')
            else format(CreateTime,'dd日') end

    看上面的查询条件

    or,and联合使用,并且根据具体的Type参数进行分组

    然后再将两个表进行连接

    declare @Type nvarchar(20) ='month';
      declare @Time DateTime =getdate();
         select DT,Total from (SELECT  distinct 
       case @Type when 'year' then format(dateadd(mm,number,@Time),'MM月')
            when 'month' then format(dateadd(dd,number,@Time),'dd日')
            else format(dateadd(dd,number,@Time),'dd日') 
            end DT
        FROM master..spt_values
            WHERE type='P' and  ((@Type='day' and number<1) or (@Type!='day' and number<50))) as T1 left join
       (select 
           case @Type when 'year' then format(CreateTime,'MM月')
            when 'month' then format(CreateTime,'dd日')
            else format(CreateTime,'dd日') 
            end DT2,Sum
       (
          isnull(ElectricalLaborHour,0)+
          isnull(ElectricalParts,0)+
          isnull(SheetSprayLaborHour,0)+
          isnull(SheetSprayParts,0)+
          isnull(SheetSprayTransLaborHour,0)+
          isnull(OilChangeLaborHour,0)+
          isnull(OilChangeParts,0)+
          isnull(WarrantyLaborHour,0)+
          isnull(WarrantyParts,0)+
          isnull(WarrantyTransLaborHour,0)+
          isnull(InternalElectricalLaborHour,0)+
          isnull(InternalParts,0)+
          isnull(InternalSheetSprayLaborHour,0)) as Total from T_DMSMaintenance where IsDelete=0 and 
           ((@Type='year' and datepart(yyyy,CreateTime)=datepart(yyyy,@Time)) or
       (@Type='month' and format(CreateTime,'yyyy年MM月')=format(@Time,'yyyy年MM月')) or
      (@Type='day' and format(CreateTime,'yyyy-MM-dd')=format(@Time,'yyyy-MM-dd')))
       group by  case @Type when 'year' then format(CreateTime,'MM月')
            when 'month' then format(CreateTime,'dd日')
            else format(CreateTime,'dd日') end) as T2 on T1.DT=T2.DT2

    例子:

        --报表类型,年报,月报,日报
        declare @Type nvarchar(20) ='month'; 
        --需要查看的报表的时间,如果是年报就2016-01-01 月报就2016-08-01,因为2016-08不能转换成日期格式,只有年的话就可以的
        declare @Time DateTime =cast('2016-02-24' as DateTime);
        --销售员ID
        declare @SalesID nvarchar(500)='F248611C-CB39-4806-919E-71DCD085D208';
        --公司ID
        declare @CompanyID nvarchar(500)='C04B3AE6-1866-4490-9D73-FAB0DB121F12';
        --按报表类型查询出x轴数据
    with ta as (
       SELECT  distinct 
       case @Type
            when 'year' then format(dateadd(mm,number,@Time),'MM月')
            when 'month' then format(dateadd(dd,number,@Time),'dd日')
            else format(dateadd(hh,number,@Time),'HH时')
            end DT
        FROM master..spt_values
            WHERE type='P' and  ((@Type='day' and number<25) or (@Type!='day' and number<50))
            ),
            --具体查询的数据信息
            tb as (
              select CreateTime as Time from T_OrderInfo where OrderBargainType=1 and  CustomerID in (select CustomerID from T_CustomerInfo where CompanyID=@CompanyID and (@SalesID=''        or cast(SalesID as nvarchar(500))= @SalesID))
            ),
            --按照报表类型进行转换
            tc as (
            select  case @Type
            when 'year' then format(Time,'MM月')
            when 'month' then format (Time,'dd日')
            else format(Time,'HH时') end  Time from tb where   
             (@Type='year' and  datepart(year,Time)=datepart(year,@Time)) or
              (@Type='month' and  convert(varchar(7),Time,120)=convert(varchar(7),@Time,120)) or
               (@Type='day' and  convert(varchar(10),Time,120)=convert(varchar(10),@Time,120))  
             )
             --最后join
            select ta.DT,isnull(b.Num,0) as Num from ta left join (select Time,Num=Count(1) from tc group by Time) b on ta.DT=b.Time
  • 相关阅读:
    Hibernate unsaved-value 属性
    ResulsetHandler九个实现类
    Introspector内省和反射的区别.
    数据库表、字段命名规范
    Linux 时间同步 ntpdate
    http升级https改造方案
    org.apache.tomcat.util.net.NioEndpoint,打开的文件过多
    kafka常用命令
    elasticsearch.yml 配置说明
    getDate() 各种时间格式
  • 原文地址:https://www.cnblogs.com/hongdada/p/4818741.html
Copyright © 2011-2022 走看看