• 记录sql中统计近五天数据的口径(While+IF)


    话不多说,直接上码↓


      1 IF OBJECT_ID('tempdb..#Table') IS NOT NULL
      2     BEGIN
      3         DROP TABLE #Table;
      4     END;
      5 
      6 DECLARE @tbRangeDate TABLE
      7     (
      8       name NVARCHAR(10) ,
      9       value NVARCHAR(10)
     10     );
     11 DECLARE @d INT = 7;
     12 DECLARE @i INT = 0;
     13 DECLARE @TotalCount INT= 5;
     14 
     15 DECLARE @SuccessMoney NVARCHAR(100) = '';
     16 DECLARE @PutawayMoney NVARCHAR(100) = '';
     17 --记录星期六,星期天的金额数据
     18 DECLARE @WeekendPutMoney DECIMAL(18, 2)= 0;
     19 DECLARE @WeekendSuccessMoney DECIMAL(18, 2)= 0;
     20 --DATEADD(DAY,-7,GETDATE());
     21 DECLARE @currentDate DATETIME= GETDATE();
     22 DECLARE @topName NVARCHAR(10) = '';
     23 DECLARE @countValue INT= 0;
     24  --近五天数据
     25 
     26 -- 声明变量
     27 DECLARE @name AS NVARCHAR(10) ,
     28     @value AS NVARCHAR(10);
     29 
     30 CREATE TABLE #Table
     31     (
     32       DisplayName VARCHAR(20) ,
     33       DayValue VARCHAR(20) ,
     34       SuccessMoney DECIMAL(18, 2) , --成交
     35       PutawayMoney DECIMAL(18, 2)  --上架
     36     );
     37 WHILE ( @d > 0 )
     38     BEGIN
     39         SET @d = @d - 1;
     40         
     41         INSERT  INTO @tbRangeDate
     42         VALUES  ( CONVERT(VARCHAR(10), DATENAME(WEEKDAY,
     43                                                 DATEADD(DAY, -( @d ),
     44                                                         @currentDate)), 23),
     45                   CONVERT(VARCHAR(10), DATEADD(DAY, -( @d ), @currentDate), 23) );
     46     END;
     47 
     48 
     49 WHILE EXISTS ( SELECT   name ,
     50                         value
     51                FROM     @tbRangeDate )
     52     BEGIN
     53  -- 也可以使用top 1
     54         SET ROWCOUNT 1;
     55         SELECT  @name = name ,
     56                 @value = value
     57         FROM    @tbRangeDate;
     58         SET @SuccessMoney = '';
     59         SET @PutawayMoney = '';
     60         SET @WeekendPutMoney = 0;
     61         SET @WeekendSuccessMoney = 0;
     62 
     63         --统计每天上架资源金额
     64         SELECT  @PutawayMoney = SUM(a.resourceTotalMoney)
     65         FROM    ( SELECT    r.Id ,
     66                             r.ResourceCode ,
     67                             ROW_NUMBER() OVER ( PARTITION BY b.ResourceId ORDER BY b.ResourceId ) AS rowNum ,
     68                             SUM(b.Number * b.BasePrice) resourceTotalMoney
     69                   FROM      ResourceManage.Resource r
     70                             JOIN ResourceManage.ResourceItem b ON r.Id = b.ResourceId
     71                   WHERE     ResourcesType IN ( 0, 1, 2, 5 )
     72                             AND r.IsDeleted = 0
     73                             AND r.IsPublish = 1
     74                             AND CONVERT(VARCHAR(10), r.PublishTime, 23) = @value
     75                   GROUP BY  r.Id ,
     76                             r.ResourceCode ,
     77                             b.ResourceId
     78                 ) a;         
     79                 --周末上架金额的数据
     80         IF @name = '星期日'
     81             OR @name = '星期六'
     82             BEGIN
     83                 SET @WeekendPutMoney = @WeekendPutMoney
     84                     + CAST(@PutawayMoney AS DECIMAL(18, 2));
     85             END;
     86 
     87             
     88                 --统计每天成交金额
     89         SELECT  @SuccessMoney = SUM(AmountOfMoney)
     90         FROM    Business.ResourceOrder
     91         WHERE   OrderSourceType IN ( 0, 1, 2, 5 )
     92                 AND IsDeleted = 0
     93                 AND CONVERT(VARCHAR(10), CreationTime, 23) = @value;
     94         --周末成交金额的数据
     95         IF @name = '星期日'
     96             OR @name = '星期六'
     97             BEGIN
     98                 SET @WeekendSuccessMoney = @WeekendSuccessMoney
     99                     + CAST(@SuccessMoney AS DECIMAL(18, 2));
    100             END;
    101 
    102 
    103         INSERT  INTO #Table
    104                 ( DisplayName ,
    105                   DayValue ,
    106                   SuccessMoney ,
    107                   PutawayMoney
    108                 )
    109         VALUES  ( @name ,
    110                   @value ,
    111                   @SuccessMoney ,
    112                   @PutawayMoney
    113                 );
    114 
    115         SET ROWCOUNT 0;
    116         DELETE  FROM @tbRangeDate
    117         WHERE   name = @name;
    118     END;
    119 
    120 SELECT TOP 1
    121         @topName = DisplayName
    122 FROM    #Table;
    123 
    124 SELECT  @countValue = COUNT(1)
    125 FROM    #Table
    126 WHERE   DisplayName = '星期六'
    127         OR DisplayName = '星期日';
    128 
    129 WHILE ( @i = 0 )
    130     BEGIN
    131         SET @i = @i + 1;
    132         DELETE  FROM #Table
    133         WHERE   DisplayName = '星期六'
    134                 OR DisplayName = '星期日';
    135         IF @countValue = 2
    136             AND ( @topName = '星期二'
    137                   OR @topName = '星期三'
    138                   OR @topName = '星期四'
    139                   OR @topName = '星期五'
    140                 )
    141             BEGIN
    142                 UPDATE  #Table
    143                 SET     PutawayMoney = PutawayMoney + @WeekendPutMoney
    144                 WHERE   DisplayName = '星期一';
    145             END;
    146     END;
    147 
    148 
    149 SELECT  *
    150 FROM    #Table;    
    151 
    152 IF OBJECT_ID('tempdb..#Table') IS NOT NULL
    153     BEGIN
    154         DROP TABLE #Table;
    155     END;
    学习本无底,前进莫徬徨。 好好学习,天天向上。
  • 相关阅读:
    课后作业
    使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。
    课程作业·02
    课程作业01
    课程作业02 将课程中的所有动手动脑的问题以及课后实验性的问题,整理成一篇文档。
    课程作业01 模仿JavaAppArguments.java示例,编写一个程序,此程序从命令行接收多个数字,求和之后输出结果。
    《大道至简》第一章伪代码
    Vue2.0版英雄联盟助手,我的第一个小开源项目
    二级下拉菜单的三种实现方法——CSS 、JS、 jQuery
    关于清除浮动 and position的一些注意点
  • 原文地址:https://www.cnblogs.com/24klr/p/11383551.html
Copyright © 2020-2023  润新知