在此處輸入圖片說明
select id,date,amount,SUM (Amount) OVER (PARTITION BY ID ORDER BY DATE desc) AS runningbalance from sales
我已經嘗試過將運行平衡從最新記錄到較舊記錄進行反向。我怎樣才能扭轉這個倒退,讓我以另一種方式保持平衡?
uj5u.com熱心網友回復:
如果您ID對每一行都是唯一的,則洗掉PARTITION BY ID其他人,它不會累積總和。為了扭轉運行總量的順序簡單顛倒ORDER BY的SUM:
DDL:
declare @sales table (
ID int,
Date date,
Amount int);
insert into @sales
values
(1, '2020-01-01', 15),
(2, '2020-01-02', 10),
(3, '2020-01-03', 5);
DML:
select ID, Date, Amount,
sum(Amount) over (order by Date) as RunningBalanceForward,
sum(Amount) over (order by Date desc) as RunningBalanceBackwards
from @sales
order by ID
結果:
| ID | 日期 | 數量 | 前向運行余額 | 向后運行平衡 |
|---|---|---|---|---|
| 1 | 2020-01-01 | 15 | 15 | 30 |
| 2 | 2020-01-02 | 10 | 25 | 15 |
| 3 | 2020-01-03 | 5 | 30 | 5 |
uj5u.com熱心網友回復:
除了運行總數之外,使用 row_number 創建排序列并按 id order by date desc 對其進行磁區,然后生成 rowid 然后按 rowid 排序
uj5u.com熱心網友回復:
只是為了展示磁區的用途的一個例子。
declare @Sales table ( ID int identity(1,1) primary key, [Date] date, Store varchar(30), Amount int ); insert into @Sales ([Date], Store, Amount) values ('2020-01-01','A',1), ('2020-01-03','A',1) , ('2020-01-05','A',1) , ('2020-01-02','B',10), ('2020-01-04','B',10) , ('2020-01-06','B',10) ; select Store, [Date], Amount, sum(Amount) over (partition by Store order by [Date] ASC) as RunningTotal, sum(Amount) over (partition by Store order by [Date] DESC) as ReverseRunningTotal from @Sales order by Store, [Date] GO商店 | 日期 | 金額 | 運行總計 | 反向運行總計 :---- | :--------- | -----: | -----------: | ------------------: 一個 | 2020-01-01 | 1 | 1 | 3 一個 | 2020-01-03 | 1 | 2 | 2 一個 | 2020-01-05 | 1 | 3 | 1 乙 | 2020-01-02 | 10 | 10 | 30 乙 | 2020-01-04 | 10 | 20 | 20 乙 | 2020-01-06 | 10 | 30 | 10
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/365111.html
上一篇:在更改資料型別時進行透視(動態)
