3

次のテーブルがあります

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
4

1 に答える 1

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のデモです。

于 2013-09-17T23:39:22.583 に答える