2014-01-22 103 views
0

我有一個具有以下信息的一個ATM機:減去累積值2008

- --Date-----|--Withdraw---|---CashLoad 
- 01/15/13--|----10----------|-------300 
- 01/16/13--|----20 
- 01/17/13--|----50 
- 01/18/13--|---120 
- 01/19/13--|----20----------|-------400 
- 01/20/13--|----60 
- 01/21/13--|----80 
- 01/22/13--|----50 
- 01/23/13--|----90----------|------300 

我想計算結束日的餘額爲ATM,這種平衡等於給CashLoad - 累計取消每天的金額。如果ATM被重新裝載,過程開始一遍又一遍

這裏就是我在尋找:

- --Date------|--Withdraw---|------CashLoad---|--------EOD_Balance 
- 01/15/13---|----10----------|-------300-----------|-----------290 
- 01/16/13---|----20----------|-----------------------|-----------270 
- 01/17/13---|----50----------|-----------------------|-----------220 
- 01/18/13---|---120---------|------------------------|----------100 
- 01/19/13---|----20----------|-------400-----------|-----------380 
- 01/20/13---|----60----------|-----------------------|-----------320 
- 01/21/13---|----80----------|-----------------------|-----------240 
- 01/22/13---|----50----------|-----------------------|-----------190 
- 01/23/13---|----90----------|-------300-----------|-----------210 

這是我目前使用的查詢:

select 
    tmp1.atminternalid, tmp1.date, 
    tmp1.CashLoad - tmp1.accum_disp as cashbalafterload 
from mytable as tmp1 where SettlementDate = (select max(SettlementDate) 
from DM_ADMIN.dbo.temptable1001 as tmp2 
where tmp2.ATMInternalID = tmp1.atminternalid) 
order by tmp1.atminternalid 

我如何改變我的查詢來獲得我正在尋找的結果?

+0

您目前正在嘗試什麼? – digitalextremist

+0

我創建了另一個名爲accum_Wtd的列,然後我嘗試使用CashLoad來減去這些值。它還沒有工作。選擇tmp1.atmid,tmp1.date,tmp1.CashLoad - tmp1.accum_wtd從MYTABLE作爲TMP1 其中日期=(選擇最大值(日期) 從MYTABLE作爲TMP2 其中tmp2.ATMID = tmp1.ATMID ) cashbalance order by tmp1.ATMID – user3221030

+0

將問題添加到問題中,因爲知道這一點至關重要。歡迎來到SO! – digitalextremist

回答

0

SQL Server 2008沒有累計求和功能。您可以使用相關子查詢解決這個問題:

select atm.*, 
     (select sum(cashload) - sum(withdraw) 
     from atm atm2 
     where atm2.date <= atm.date 
     ) as EOD_Balance 
from atm; 

編輯:

嗯,這確實改變了問題。您需要從以前的現金負荷日期總結:

select atm.*, 
     (select sum(cashload) - sum(withdraw) 
     from atm atm3 
     where atm3.date <= atm.date and 
       atm3.date >= CashLoadDate 
     ) as EOD_Balance 
from (select atm.*, 
      (select max(date) 
       from atm atm2 
       where atm2.date <= atm.date and 
        cashload > 0 
      ) as CashLoadDate 
     from atm 
    ) atm; 
+0

感謝代碼Gordon。 – user3221030

+0

感謝代碼,戈登。但是,我忘記提到在新的現金負荷之前,他們先拿出剩餘的現金,然後將新的數額裝入自動櫃員機。例如:2013年1月18日,剩餘現金爲100美元,2013年1月19日,他們拿走了100美元,投入400美元,現在EOD_Balance爲380美元(400美元-20美元),而非400美元+ 100美元-20美元) – user3221030

+0

我試過了,但收到了一些錯誤消息。你能幫忙嗎? 謝謝,戈登! 消息107,級別15,狀態1,行7 列前綴'atm'與查詢中使用的表名或別名不匹配。 消息4104,級別16,狀態1,行10 無法綁定多部分標識符「atm.date」。 消息8155,級別16,狀態2,行14 未對'atm'的列1指定列名稱。 消息207,級別16,狀態1,行4 列名'date'無效。 – user3221030