+--------+-----------+-------+
| PartId | InvoiceId | Price |
+--------+-----------+-------+
| 200 | 1000 | 10000 |
| 201 | 1001 | 22000 |
| 202 | 1002 | 30000 |
+--------+-----------+-------+
+--------+-----------+-------+
| PartId | PaymentId | Price |
+--------+-----------+-------+
| 200 | 1000 | 1000 |
| 200 | 1001 | 3000 |
| 201 | 1002 | 5000 |
+--------+-----------+-------+
+-----------+-----------+-------------------------+
| InvoiceId | PaymentId | Balance Need to be Paid |
+-----------+-----------+-------------------------+
| 1000 | 1000 | 9000 |
| 1000 | 1001 | 6000 |
| 1001 | 1002 | 17000 |
+-----------+-----------+-------------------------+
由于游标性能不太好,不使用游标是否有任何可能的方法来更新发票付款映射表?
答案 0 :(得分:1)
您可以在一次更新中执行此操作。以下是相当推测的,因为你的问题没有所有必要的细节。您可以在join
查询中使用update
:
update ip
set BalanceToBePaid = (i.price - p.sumprice)
from invoicepayment ip join
invoices i
on ip.invoiceid = i.invoiceid join
(select paymentid, sum(price) as sumprice
from payments
group by paymentid
) p
on ip.payment = p.payment;