SQL SERVER:開窗函數 SUM() OVER() 數據統計中一例使用


           

 

            由於前一段時間胃痛,導致博客園博客都停更了一個月左右。近幾天,胃病終於稍微有所好轉,決定重新寫博文。

            前幾天,有個朋友剛好問到本人有關 SQL 語句,大致是原表有兩列,分別為月份、月份銷售額,而需要一條 SQL 語句實現統計出每個月份以及當前月以前月份銷售額和。尼瑪,感覺還是沒有說清,下面用圖表示。

 

          

       

 SQL 測試表腳本  

    

DECLARE @Temp Table
(
  ID INT, --- 月份
  MoneyData Float  --- 金額 
)

insert  INTO @TEMP
SELECT 1,100 UNION ALL
SELECT  2,200 UNION ALL
SELECT  3,300 UNION ALL
SELECT  4,400 UNION ALL
SELECT  5,500 UNION ALL
SELECT  6,600 UNION ALL
SELECT  7,600

 一 自連接

SELECT  A.ID, SUM(B.MoneyData)  FROM @Temp A INNER JOIN @Temp B
ON A.ID>=B.ID GROUP BY A.ID

------ 重點在於 ON 條件,通過自連接 A.ID >= B.ID ,可獲取所需數據,再通過
GROUP BY 、SUM 即可統計求和

  

二 開窗函數

 

SELECT  ID, MoneyData,   SUM(MoneyData) OVER( ) AS '總銷售額',
SUM(MoneyData) OVER( PARTITION BY ID ) AS '月銷售額',
 SUM(MoneyData) OVER( ORDER BY ID ASC)  AS '當月+當月前銷售額'
 FROM @Temp

---- 此處,使用開窗函數使用更為簡單,不過,其中 SUM() OVER ( ORDER BY ID ASC ) 即可實現以上功能

  

 

關於,開窗函數的具體用法,可參考微軟 MSDN 官方 API 文檔,最后,推薦一本開窗函數書:基於 SQL SERVER 2012 窗口函數。

 

參考:https://msdn.microsoft.com/zh-cn/library/ms173454.aspx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM