【发布时间】:2014-09-19 01:23:40
【问题描述】:
我有两张表,分别称为“恢复”和“分期付款”。
Recovery ([pk] RID, emp_id, amount, duration, type]
Installments ([pk] ID, [fk] recovery_id, recovered_amount, date)
当员工获得贷款时,该信息存储在Recovery 表中。然后从月薪中分期偿还这笔贷款。 (分期付款是[amount /duration])。
恢复后,有关已恢复分期付款的详细信息应存储在Installments 表中。由于贷款可能分期收回,Recovery 与 Payments 的关系为1:M.
现在假设我只想找出应该从工资中扣除的所有恢复细节。我在这方面写了这个查询。这里我取所有已付分期付款的总和,然后从贷款金额中扣除,如果余额大于 0,则计算分期付款。预期结果是Emp_DI | Installment
WITH Summary (RID, emp_id, amount, duration, installment)
AS(
SELECT Recovery.RID, Recovery.emp_id, Recovery.amount, Recovery.duration, SUM(Installment.recovered_installment) AS Installments
FROM Recovery LEFT OUTER JOIN
Installment ON Recovery.RID = Installment.recovery_id
WHERE Recovery.type = 'Loan'
GROUP BY Recovery.duration, Recovery.amount, Recovery.emp_id, Recovery.RID
)
SELECT emp_id, SUM(amount / duration) AS INS FROM Summary
WHERE ((CASE WHEN installment != NULL THEN (amount-installment)
ELSE(amount) END)> 0 )
GROUP BY emp_id
此查询运行良好,可提供所需的输出,但有一个例外。 IE。似乎 WHERE 子句中存在问题。
WHERE ((CASE WHEN installment != NULL THEN (amount-installment)
ELSE(amount) END)> 0 )
这不会按预期过滤掉余额为零的记录。我无法理解这其中的原因。那么你能帮帮我吗?非常感谢您的帮助!
【问题讨论】:
-
谢谢所有回答的人。我没有意识到这一点;)我刚刚接受了第一个答案。再次感谢它真的很有帮助!
标签: sql sql-server filtering where-clause common-table-expression