2017-05-29 96 views
-1

我在計算餘額,但某些值的餘額不正確。我不知道爲什麼!SQL Server餘額計算

SELECT 
    Date, 
    ID, 
    VALUE, 
    Op_Type_Id, 
    (SELECT 
     SUM(CASE 
       WHEN Op_Type_Id = 1 OR Op_Type_Id = 3 OR Op_Type_Id = 5 
        THEN y.Value 
       WHEN Op_Type_Id = 2 OR Op_Type_Id = 4 OR Op_Type_Id = 6 
        THEN (0 - value) 
      END) 
    FROM dbo.Reestr y 
    WHERE x.date >= y.date AND x.id >= y.ID) AS BalanceGel 
FROM 
    dbo.Reestr x 

下面是我對我怎麼了計算,但輸出錯誤在某些情況下

Date  VALUE Op_Type_Id BalanceGel 
-------------------------------------------- 
2017-04-21 470  2   -470 
2017-05-09 50  1   -420 
2017-04-30 60  2   -530 
2017-05-09 860  1   380 
2017-05-29 15  1   395 
2017-05-18 78  2   302 
+1

請解釋您的輸出中哪個值是錯誤的,以及什麼應該是正確的值。也提供用作輸入的數據。 – DhruvJoshi

+0

類型爲2時必須 - 如果類型= 1,那麼總結和看,當-530 + 860 = geting錯誤的數字380必須是330:D和當395-78 geting 302 – Wuhu

+0

請看我的回答 – DhruvJoshi

回答

0

原因你的價值顯示出來,因爲他們僅僅是由於線路

WHERE x.date >= y.date AND x.id >= y.ID 
代碼

特別是日期之間的條款>=。所以在線路

2017-05-09 860  1   380 

當我們遇到內部查詢,內側查詢WHERE部分得到其日期是這樣的,他們是< = 2017-05-09所有記錄。滿足這個條件的記錄是

2017-04-21 470  2  
2017-05-09 50  1 
2017-04-30 60  2  
2017-05-09 860  1  

Op_type_id = 1添加值和減去那些Op_type_id = 2 我們得到-470+50-60+860 = 380;這就是你所看到的。

+0

我做了程序多數民衆贊成在工作,但我現在試圖把它在選擇:(但有點我不能做到這一點 – Wuhu