SQL Server余额计算

时间:2017-05-29 07:49:24

标签: sql-server tsql

我在计算余额,但某些值的余额不正确。我不知道为什么!

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 个答案:

答案 0 :(得分: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;这就是你所看到的。