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

來源:互聯網
上載者:User

標籤:

           

 

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

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

 

          

       

 SQL 測試表指令碼  

    

DECLARE @Temp Table(  ID INT, --- 月份  MoneyData Float  --- 金額 )insert  INTO @TEMPSELECT 1,100 UNION ALLSELECT  2,200 UNION ALLSELECT  3,300 UNION ALLSELECT  4,400 UNION ALLSELECT  5,500 UNION ALLSELECT  6,600 UNION ALLSELECT  7,600

 一 自串連

SELECT  A.ID, SUM(B.MoneyData)  FROM @Temp A INNER JOIN @Temp BON 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

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.