最近在弄一個報表,要求每行的最后一列欄位顯示余額金額,就是上一行余額金額加上當前行的余額
一開始我都是在程式里面處理,這次需要用Sql寫出來,一下犯難了,
同事介紹到有個視窗函式可以實作,我用了好多年的SqlServer,都不知有這個東西,
記錄一下,免得以后忘記了

以這個表為例子
--不分組統計 select *, sum(score) over(order by score desc,id) as '分數余額', sum(score) over() as '分數總計', rank() over(order by score desc ) '排名', dense_rank() over(order by score desc) as '排名2', row_number() over(order by score desc) as '行號' from Test01 order by score desc --分組統計 select *, sum(score) over(partition by class order by score desc,id) as '所在班級分數余額', sum(score) over(partition by class) as '所在班級分數總計', rank() over(partition by class order by score desc ) '所在班級排名', dense_rank() over(partition by class order by score desc) as '所在班級排名2', row_number() over(partition by class order by score desc) as '所在班級行號' from Test01 order by class, score desc
如果如下圖所示

視窗函式大體可以分成兩種
一種是聚合統計型別,partition by跟order by都是可選的,像sum、avg、count、max、min
一種是排行型別,必須有order by,partition by可選,像rank、dense_rank、row_number
Partition By 是以哪個欄位進行分組,沒有就是無分組,或者把全部資料當成一組 Order By 如果加上這個引數,就會以哪個欄位進行排序,并統計當前行跟記錄之上的資料進行計算,如果沒有,就是統計全部行
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/545997.html
標籤:SQL Server
