我在计算余额,但某些值的余额不正确。我不知道为什么!
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
答案 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
;这就是你所看到的。