记录sql中统计近五天数据的口径(While+IF)
话不多说,直接上码↓
IF OBJECT_ID('tempdb..#Table') IS NOT NULL
BEGIN
DROP TABLE #Table;
END;
DECLARE @tbRangeDate TABLE
(
name NVARCHAR() ,
value NVARCHAR()
);
DECLARE @d INT = ;
DECLARE @i INT = ;
DECLARE @TotalCount INT= ;
DECLARE @SuccessMoney NVARCHAR() = '';
DECLARE @PutawayMoney NVARCHAR() = '';
--记录星期六,星期天的金额数据
DECLARE @WeekendPutMoney DECIMAL(, )= ;
DECLARE @WeekendSuccessMoney DECIMAL(, )= ;
--DATEADD(DAY,-,GETDATE());
DECLARE @currentDate DATETIME= GETDATE();
DECLARE @topName NVARCHAR() = '';
DECLARE @countValue INT= ;
--近五天数据
-- 声明变量
DECLARE @name AS NVARCHAR() ,
@value AS NVARCHAR();
CREATE TABLE #Table
(
DisplayName VARCHAR() ,
DayValue VARCHAR() ,
SuccessMoney DECIMAL(, ) , --成交
PutawayMoney DECIMAL(, ) --上架
);
WHILE ( @d > )
BEGIN
SET @d = @d - ;
INSERT INTO @tbRangeDate
VALUES ( CONVERT(VARCHAR(), DATENAME(WEEKDAY,
DATEADD(DAY, -( @d ),
@currentDate)), ),
CONVERT(VARCHAR(), DATEADD(DAY, -( @d ), @currentDate), ) );
END;
WHILE EXISTS ( SELECT name ,
value
FROM @tbRangeDate )
BEGIN
-- 也可以使用top
SET ROWCOUNT ;
SELECT @name = name ,
@value = value
FROM @tbRangeDate;
SET @SuccessMoney = '';
SET @PutawayMoney = '';
SET @WeekendPutMoney = ;
SET @WeekendSuccessMoney = ;
--统计每天上架资源金额
SELECT @PutawayMoney = SUM(a.resourceTotalMoney)
FROM ( SELECT r.Id ,
r.ResourceCode ,
ROW_NUMBER() OVER ( PARTITION BY b.ResourceId ORDER BY b.ResourceId ) AS rowNum ,
SUM(b.Number * b.BasePrice) resourceTotalMoney
FROM ResourceManage.Resource r
JOIN ResourceManage.ResourceItem b ON r.Id = b.ResourceId
WHERE ResourcesType IN ( , , , )
AND r.IsDeleted =
AND r.IsPublish =
AND CONVERT(VARCHAR(), r.PublishTime, ) = @value
GROUP BY r.Id ,
r.ResourceCode ,
b.ResourceId
) a;
--周末上架金额的数据
IF @name = '星期日'
OR @name = '星期六'
BEGIN
SET @WeekendPutMoney = @WeekendPutMoney
+ CAST(@PutawayMoney AS DECIMAL(, ));
END;
--统计每天成交金额
SELECT @SuccessMoney = SUM(AmountOfMoney)
FROM Business.ResourceOrder
WHERE OrderSourceType IN ( , , , )
AND IsDeleted =
AND CONVERT(VARCHAR(), CreationTime, ) = @value;
--周末成交金额的数据
IF @name = '星期日'
OR @name = '星期六'
BEGIN
SET @WeekendSuccessMoney = @WeekendSuccessMoney
+ CAST(@SuccessMoney AS DECIMAL(, ));
END;
INSERT INTO #Table
( DisplayName ,
DayValue ,
SuccessMoney ,
PutawayMoney
)
VALUES ( @name ,
@value ,
@SuccessMoney ,
@PutawayMoney
);
SET ROWCOUNT ;
DELETE FROM @tbRangeDate
WHERE name = @name;
END;
SELECT TOP
@topName = DisplayName
FROM #Table;
SELECT @countValue = COUNT()
FROM #Table
WHERE DisplayName = '星期六'
OR DisplayName = '星期日';
WHILE ( @i = )
BEGIN
SET @i = @i + ;
DELETE FROM #Table
WHERE DisplayName = '星期六'
OR DisplayName = '星期日';
IF @countValue =
AND ( @topName = '星期二'
OR @topName = '星期三'
OR @topName = '星期四'
OR @topName = '星期五'
)
BEGIN
UPDATE #Table
SET PutawayMoney = PutawayMoney + @WeekendPutMoney
WHERE DisplayName = '星期一';
END;
END;
SELECT *
FROM #Table;
IF OBJECT_ID('tempdb..#Table') IS NOT NULL
BEGIN
DROP TABLE #Table;
END;
记录sql中统计近五天数据的口径(While+IF)的更多相关文章
- sql中对查询出来的数据进行分页
当sql中存储的数据量比较大时,在web中 数据显示时都会对数据进行分页,分页不会在客户端进行分页,而是在数据库查询过程中进行了分页. sql代码: DECLARE @pageindex INT; - ...
- SQL中CRUD C——create 添加数据 R——read 读取数据 U——update 修改数据 D——delete 删除数据
在SQL server中对数据库的操作: 删除表:drop table 表名修改表:alter table 表名 添加列add 列名 列类型alter table 表名 drop column 列名 ...
- SQL中的float类型的数据
问题1. 如何在SQL中默认的使用float类型的数据 SQL中想要通过计算的方式最快的得到一个float类型的数据,只需要运算的其中一个值后面加上小数点就ok. 比如 :9/2=4 但是 :9/2 ...
- Android中常用的五种数据存储方式
第一种: 使用SharedPreferences存储数据 适用范围: 保存少量的数据,且这些数据的格式非常简单:字符串型.基本类型的值.比如应用程序的各种配置信息(如是否打开音效.是否使用震动效果.小 ...
- sql中使用timestamp增量抽取数据
网址:http://www.cnblogs.com/shuaifei/p/4469526.html 最近的项目中需要对上百万级的数据进行增量抽取操作,因此了解了一下TIMESTAMP的应用,特此记录 ...
- 简单Sql语句统计每年每个月的数据,每个月为数据的每列,简单SQL练习
有一张表,数据如下 请写出结果为以下的SQL语句. 在mysql中创建表 CREATE TABLE `aa` ( `id` int(10) NOT NULL AUTO_INCREMENT COMME ...
- sql中如何获取一条数据中所有字段的名称和值
declare ) ) --获取表的列名 ,),filename INTO #templist FROM (select cl.name as filename from sys.tables AS ...
- [SQL]SQL中把一个字段的数据分多行显示
其实你完全可以写个自定义函数就OK了 . =================================================================== create func ...
- SQL中获取排序分组后数据的脚本
废话不多说了,先上一段代码,如下所示: select distinct b.OrgID,b.CompanyID,b.AreaID,b.CustChannelID,b.CustID,b.SaleTo ...
随机推荐
- JavaScript创建函数的三种方式
㈠函数(function) ⑴函数也是一个对象 ⑵函数中可以封装一些功能(代码),在需要时可以执行这些功能(代码) ⑶函数中可以保存一些代码在需要的时候调用 ⑷使用typeof检查一个函数对象时,会返 ...
- C++全局变量的定义和声明
编译单元 编译分为两个步骤: 第一步:将每个.cpp或.c和相应的.h文件编译乘obj文件(包含预编译,汇编.编译) 第二部:将obj文件进行Link,生成最终的可执行文件 根据该阶段错误大致可分为两 ...
- Educational Codeforces Round 13 D. Iterated Linear Function 逆元+公式+费马小定理
D. Iterated Linear Function time limit per test 1 second memory limit per test 256 megabytes input s ...
- HDU 1512 Monkey King(左偏堆)
爱争吵的猴子 ★★☆ 输入文件:monkeyk.in 输出文件:monkeyk.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 在一个森林里,住着N只好斗的猴子.开始,他们各 ...
- C++cctype软件包函数摆脱,ASCII码!
对于字符,你是否还在用ASCII码? 下面是C++的函数库,摆脱ASCI码! 1.isalnum(): 判断是否为数字和字母 2.isalpha(): 判断是否是字母 3.iscntrl(): 判断是 ...
- JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...
- centernet 相关
1.下代码 git clone https://github.com/Duankaiwen/CenterNet.git 2.
- Sublime Text 使用笔记(大全呀,菜鸟必看)
下载和安装 Sublime Text2是一款开源的软件,不需要注册即可使用(虽然没有注册会有弹窗,但是基本不影响使用). 下载地址:http://www.sublimetext.com ,请自行根据系 ...
- 【分类模型评判指标 一】混淆矩阵(Confusion Matrix)
转自:https://blog.csdn.net/Orange_Spotty_Cat/article/details/80520839 略有改动,仅供个人学习使用 简介 混淆矩阵是ROC曲线绘制的基础 ...
- 我的zshrc文件设置备份
# If you come from bash you might have to change your $PATH. # export PATH=$HOME/bin:/usr/local/bin: ...