轉自:http://www.maomao365.com/?p=5710 摘要:今天接到一個需求,有一張數據表,記錄的是消費明細數據,現在需要做一個累計結餘,記錄每次的數據結餘合計,下文將展示一種sql腳本的編寫方式實驗環境:sqlserver 2008 R2如下例所示: ...
轉自:http://www.maomao365.com/?p=5710
摘要:
今天接到一個需求,有一張數據表,記錄的是消費明細數據,
現在需要做一個累計結餘,記錄每次的數據結餘合計,
下文將展示一種sql腳本的編寫方式
實驗環境:sqlserver 2008 R2
如下例所示:
detail表 記帳流水錶 ========== 欄位: qt_srMoney (money) 收入 qt_zcMoney (money) 支出 qt_date (datetime) 操作日期 qt_dkfs (nvarchar) 打款方式 ------------------ 需獲取一個帶結餘的數據信息 ========== 根據期初表中的日期和金額,查詢出記帳表中的結餘。 帳面結餘 =期初金額+收入-支出 實驗環境:sql server 2008 R2 */ create table detail(qt_srMoney money, qt_zcMoney money, qt_date datetime, qt_dkfs nvarchar(100)) insert into detail values(100,0,'2018-1-2 10:00:00','other') insert into detail values(0,10,'2018-2-2 10:00:00','other') insert into detail values(0,20,'2018-3-2 10:00:00','other') insert into detail values(30,0,'2018-4-2 10:00:00','other') insert into detail values(10,60,'2018-5-2 10:00:00','other') go declare @datestart datetime ---開始計算日期 set @datestart ='2018-2-1' declare @qcomney money --期初 set @qcomney =100 select t1.qt_date,t1.qt_dkfs,t1.qt_srMoney,t1.qt_zcMoney,sum(t2.qt_srMoney-t2.qt_zcMoney)+@qcomney from detail t1,detail t2 where t1.qt_date>=t2.qt_date and t1.qt_date >=@datestart group by t1.qt_date,t1.qt_dkfs,t1.qt_srMoney,t1.qt_zcMoney order by t1.qt_date; go ---避免日期出現兩條導致結餘數據計算異常----- declare @datestart datetime ---開始計算日期 set @datestart ='2018-2-1' declare @qcomney money --期初 set @qcomney =100 with cteName as ( select qt_srMoney,qt_zcMoney,qt_date,qt_dkfs, row_number() over ( order by qt_date) as keyID from detail where qt_date >=@datestart ) select t1.keyId,t1.qt_date,t1.qt_dkfs,t1.qt_srMoney,t1.qt_zcMoney,sum(t2.qt_srMoney-t2.qt_zcMoney)+@qcomney from cteName t1,cteName t2 where t1.keyId>=t2.keyId group by t1.qt_date,t1.qt_dkfs,t1.qt_srMoney,t1.qt_zcMoney,t1.keyId order by t1.keyId; go truncate table detail drop table detail