0
我有一個表,我的發票號碼和付款金額,例如多行打破了下來:總共基於
invoice 1234 1000
我有那個量被分配到的工作,例如另一個表:
Job 1 500 Invoice 1234
Job 2 200 Invoice 1234
Job 3 300 Invoice 1234
如何讓1000分配到正確的下面的行。在工作分配上可能有一行或超過上面顯示的內容......僅取決於發票。
我有一個表,我的發票號碼和付款金額,例如多行打破了下來:總共基於
invoice 1234 1000
我有那個量被分配到的工作,例如另一個表:
Job 1 500 Invoice 1234
Job 2 200 Invoice 1234
Job 3 300 Invoice 1234
如何讓1000分配到正確的下面的行。在工作分配上可能有一行或超過上面顯示的內容......僅取決於發票。
好吧,讓我假設你使用的是Oracle,因爲這在數據庫中是最簡單的。
您需要的是累積金額,與付款金額相比。那麼,讓我假設您想將付款用於最早的發票。以下查詢是這樣做的:
select i.*,
(case when cumAmount <= p.payment then Amount
when cumAmount - i.Amount < p.payment then p.payment - (i.cumAmount - i.Amount)
else 0
end) as AppliedPayment
from (select p.InvoiceId, sum(p.payment) as payment
from Payment p
group by p.InvoiceId
) join
(select i.*,
sum(i.amount) over (partition by i.InvoiceId order by i.JobNum) as cumAmount
from Invoices i
) i
on p.InvoiceId = i.InvoiceId
因此,您的想法是您創建發票金額的累計總和。然後,您將其與付款進行比較。當累計金額小於付款時,您可以應用整個發票金額。當累計金額遠高於付款金額時,則無法應用。您有可能會有部分付款的邊界條件。
第一個子查詢累積發票的所有付款,以避免重複。第二個子查詢計算累計發票金額。
其他一些數據庫直接支持累計和(SQL Server 2012)。在其他情況下,您需要進行自我連接才能獲得此結果。
請問您能否重新解釋最後一段。 – Sean
請張貼一些示例數據和您的預期結果。 – Taryn
你在使用什麼數據庫? –