SQL Server中的金额分配金额

时间:2013-09-17 21:34:17

标签: sql sql-server sql-server-2008 select

我有以下表格

LINEID   BILL   Total Amount     Allocated Amount
1         1         100             
2         1         200
3         2         250

PAYID    BILL    Paid Amount
1         1         250
2         2         100

我需要根据账单在第一张表上分配付费金额。我知道我可以将光标与WHILE循环一起使用并分配 - 有更好的方法吗?

结果应为

LINEID   BILL   Total Amount     Allocated Amount
1         1         100             100
2         1         200         150
3         2         250         100

1 个答案:

答案 0 :(得分:3)

WITH  cl AS
(select o.LINEID, o.BILL, o.[Total Amount], 
(select SUM([Total Amount]) from bills t where o.BILL = t.BILL and o.LINEID >= t.LINEID) as 'sum_total_ammount'
from bills o inner join payment p on o.BILL = p.BILL)

select o.LINEID, o.BILL, o.[Total Amount], 
case when p.[Paid Amount] >= sum_total_ammount then o.[Total Amount] 
else (o.[Total Amount] - sum_total_ammount + p.[Paid Amount]) end as 'Allocated Amount'
from cl o inner join payment p on o.BILL = p.BILL
and (o.[Total Amount] - sum_total_ammount + p.[Paid Amount]) > 0

这是SqlFiddle上的演示。