SQL对记录结果进行按日汇总并支持分页,无记录填充0值

数据库中的格式如下,是个记录明细表,要求对明细表进行按日汇总倒序输出。

用下面的SQL语句可以进行按日汇总并且可以分页输出

DECLARE @Days TABLE
		(
			日期 DATETIME
		)
DECLARE @StartDate datetime='2014-04-05 14:22:20'--汇总的开始日期
DECLARE @EndDate datetime='2015-04-08 15:21:33'--汇总的结束日期
DECLARE @start DATETIME
DECLARE @E2_UserName varchar(100)='CN000001'--用户名
DECLARE @StartID INT=1--分页使用的获取记录的开始ID
DECLARE @EndID INT =15--分页使用的获取记录的结束ID,测试为15条数据
SET @start = CONVERT(VARCHAR, @StartDate, 23 )+' 00:00:00'
WHILE @start <= CONVERT(VARCHAR, @EndDate, 23 )+' 00:00:00'
BEGIN
	INSERT INTO @Days VALUES(@start)
	SET @start = DATEADD(DAY, 1, @start)
END;
WITH orderList AS (
		   SELECT ROW_NUMBER() OVER (ORDER BY 日期 DESC)AS Row,--这里规定了是按日期倒序排列
		   SUM(MD_TuiJianJiang) AS 'MD_TuiJianJiang',
		   SUM(MD_JianDianJiang) AS 'MD_JianDianJiang',
		   SUM(MD_RiFenHong) AS 'MD_RiFenHong',
		   SUM(MD_JiHuo) AS 'MD_JiHuo',
		   SUM(MD_TGZXJiang) AS 'MD_TGZXJiang',
		   SUM(MD_LingDaoJiang) AS 'MD_LingDaoJiang',
		   SUM(MD_ShiChangJiang) AS 'MD_ShiChangJiang',
		   SUM(MD_Help) AS 'MD_Help',
		   SUM(MD_Luckly) AS 'MD_Luckly',
		   SUM(MD_FanBuJiang) AS 'MD_FanBuJiang',
		   SUM(MD_Month) AS 'MD_Month',
		   SUM(MD_CheckIN) AS 'MD_CheckIN',
		   SUM(TOTAL) AS 'TOTAL',
		   日期
	FROM (
		SELECT
			   SUM(ISNULL([MD_TuiJianJiang],0)) AS 'MD_TuiJianJiang',
			   SUM(ISNULL([MD_JianDianJiang],0)) AS 'MD_JianDianJiang',
			   SUM(ISNULL([MD_RiFenHong],0)) AS 'MD_RiFenHong',
			   SUM(ISNULL([MD_JiHuo],0)) AS 'MD_JiHuo',
			   SUM(ISNULL([MD_TGZXJiang],0)) AS 'MD_TGZXJiang',
			   SUM(ISNULL([MD_LingDaoJiang],0)) AS 'MD_LingDaoJiang',
			   SUM(ISNULL([MD_ShiChangJiang],0)) AS 'MD_ShiChangJiang',
			   SUM(ISNULL([MD_Help],0)) AS 'MD_Help',
			   SUM(ISNULL([MD_Luckly],0)) AS 'MD_Luckly',
			   SUM(ISNULL([MD_FanBuJiang],0)) AS 'MD_FanBuJiang',
			   SUM(ISNULL([MD_Month],0)) AS 'MD_Month',
			   SUM(ISNULL([MD_CheckIN],0)) AS 'MD_CheckIN',
			   SUM(ISNULL(MD_TuiJianJiang+MD_RiFenHong+MD_JianDianJiang+MD_JiHuo,0)) AS 'TOTAL',
			   --ISNULL(DAY(MD_Datetime),DAY(B.日期)) AS 'MD_Datetime',
			   ISNULL([E2_UserName],@E2_UserName) AS 'E2_UserName',
			   B.日期
		FROM [E2_MoneyDetails]
		RIGHT JOIN @Days B ON CONVERT(VARCHAR, MD_Datetime, 23 )+' 00:00:00'=B.日期 AND [E2_UserName][email protected]_UserName
		WHERE  B.日期 BETWEEN DATEADD(DAY, -1, @StartDate) AND @EndDate
		GROUP BY B.日期,E2_UserName
	) E
	GROUP BY 日期
)
SELECT *
FROM orderlist
WHERE Row BETWEEN @StartID AND @EndID

最终的结果样式为

时间: 2024-10-19 10:07:56

SQL对记录结果进行按日汇总并支持分页,无记录填充0值的相关文章

统计一个数据库中,无记录的表的sql语句

2016-05-20 SQL Server数据库中统计无记录数的表 大家使用的时候,将sql脚本中的红色[TestDB] 换成你的目标数据库名称. 1 /************************************************************ 2 * Code formatted by SoftTree SQL Assistant ?v7.0.158 3 * Time: 2016/5/19 18:47:02 4 * Author:zhangcn 5 *******

SQL通用优化方案(where优化、索引优化、分页优化、事务优化、临时表优化)

SQL通用优化方案:1. 使用参数化查询:防止SQL注入,预编译SQL命令提高效率2. 去掉不必要的查询和搜索字段:其实在项目的实际应用中,很多查询条件是可有可无的,能从源头上避免的多余功能尽量砍掉,这是最简单粗暴的解决方案.3. 选择最有效率的表名顺序: 数据库的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表放在最后,如果有3个以上的表连接查询,那就需要选择那个被其他表所引用的表放在最后.

SQL Server 2008, 2008 R2, 2012 and 2014 完全支持TLS1.2加密传输

SQL Server 2008, 2008 R2, 2012 and 2014 完全支持TLS1.2加密传输 微软高兴地宣布所有主流SQL Server客户端驱动和SQL Server发行版已经支持Transport Layer Security 1.2简称TLS 1.2. 发布时间是 2016年1月29日,这次发布提供了SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 and SQL Server 2014对TLS1.2的完全支持. 支持

【方法1】删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录

介绍 晚上无聊的时候,我做了一个測试题,測试题的大体意思是:删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录. 比如: I have a map with duplicate values: ("A", "1"); ("B", "2"); ("C", "2"); ("D", "3"); ("E", "

【方法2】删除Map中Value重复的记录,并且只保留Key最小的那条记录

根据guigui111111的建议:先把Map按Key从大到小排序,然后再把Key和Value互换.这也是一种很好的思路,我写了一下代码,顺便贴上来,供大家参考与分享. package shuai.study.map; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import j

删除Map中Value重复的记录,并且只保留Key最小的那条记录

介绍 晚上无聊的时候,我做了一个测试题,测试题的大体意思是:删除Map中Value重复的记录,并且只保留Key最小的那条记录. 例如: I have a map with duplicate values: ("A", "1"); ("B", "2"); ("C", "2"); ("D", "3"); ("E", "3

robot framework 怎么验证搜索无记录,页面元素不存在

假设你要验证搜索无记录,页面元素不存在,假设我搜索的文本为你好 页面展示为如下 搜索:你好 假设页面搜索有结果: 你好  class=vtext 你好1  class=vtext 你好2  class=vtext 搜索:你好 假设页面搜索无数据: ps:空白 方法一 方法二 css=.vtext 取的是查询出来有数据这一列的class,不存在的话就返回false

【方法3:Perl版本】删除Map中Value重复的记录,并且只保留Key最小的那条记录

icemouse210写了一个Perl版本的,发挥了脚本高度封装的优势.我把代码贴出来,供大家参考分享. #!/user/bin/perl -w use English; use strict; use warnings; my %test_hash=( "A" => '1', "B" => '2', "C" => "2", "D" => "3", "E

windows server 2008 R2 SP1 安装SQL Server 2008 R2时提示 &quot;此操作系统不支持此版本的 SQL Server 版本&quot;

windows server 2008 R2 SP1 安装SQL Server 2008 R2时提示 "此操作系统不支持此版本的 SQL Server 版本" 原因: 安装的时候输入了标准版的key ,换成企业版的key 就行了. 福利 企业版64位 key : GYF3T-H2V88-GRPPH-HWRJP-QRTYB