码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2015-04-09 11:53:11      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:按日汇总   mssql   数据库   

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

技术分享

用下面的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]=@E2_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

最终的结果样式为

技术分享

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

标签:按日汇总   mssql   数据库   

原文地址:http://blog.csdn.net/wdw984/article/details/44957355

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!