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

           

 

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

            前幾天,有個朋友恰好問到本人有關 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

 一 自鏈接spa

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 便可統計求和

  

二 開窗函數blog

 

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博客

相關文章
相關標籤/搜索