SQL對記錄結果進行按日匯總並支援分頁,無記錄填充0值,sql按日

來源:互聯網
上載者:User

SQL對記錄結果進行按日匯總並支援分頁,無記錄填充0值,sql按日

資料庫中的格式如下,是個記錄明細表,要求對明細表進行按日匯總倒序輸出。

用下面的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 DATETIMEDECLARE @E2_UserName varchar(100)='CN000001'--使用者名稱DECLARE @StartID INT=1--分頁使用的擷取記錄的開始IDDECLARE @EndID INT =15--分頁使用的擷取記錄的結束ID,測試為15條資料SET @start = CONVERT(VARCHAR, @StartDate, 23 )+' 00:00:00'WHILE @start <= CONVERT(VARCHAR, @EndDate, 23 )+' 00:00:00'BEGININSERT 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_UserNameWHERE  B.日期 BETWEEN DATEADD(DAY, -1, @StartDate) AND @EndDateGROUP BY B.日期,E2_UserName) EGROUP BY 日期)SELECT *FROM orderlistWHERE Row BETWEEN @StartID AND @EndID

最終的結果樣式為


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.