SQL Server余额计算

SQL Server余额计算

问题描述:

我在计算余额,但某些值的余额不正确。我不知道为什么!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

原因你的价值显示出来,因为他们仅仅是由于线路

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