【发布时间】:2019-01-18 20:57:21
【问题描述】:
我正在开发一项服务,该服务需要根据总发票金额和客户已支付的部分付款来计算客户欠款。
所以,在表格 A 中有一行包含发票总价值:
[dbo].[表A]
ID CustomerId InvoiceVal
1 12 1000
2 11 2000
3 10 5000
4 14 15000
5 12 100
6 16 8000
7 18 3200
在表 B 中,我记录了每个客户对每张发票的部分付款:
[dbo].[TableB]
ID InvoiceId Payment
1 1 150
2 3 50
3 1 120
4 1 100
5 5 90
6 4 7500
因此,如您所见,客户 12 有一张 1000 美元的发票,并支付了 3 次总金额为 370 美元的付款
我需要能够查看每一行的部分欠款,这是预期的结果:
No. InoviceId CustomerId Payment Owed
1 1 12 150 850
2 1 12 120 730
3 1 12 100 630
到目前为止,这是我的代码:
DECLARE @invid int = '1'
DECLARE @invoicetotal numeric(18,2)
SET @invoicetotal =
(
SELECT
[dbo].[TableA].[InvoiceVal]
FROM [dbo].[TableA]
WHERE
([dbo].[TableA].[ID] = @invid)
)
SELECT
*,
SUM(@invoicetotal - [dbo].[TableB].[Payment]) OVER(ORDER BY [dbo].[TableB].[ID] ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS [Owed]
FROM [dbo].[TableB]
WHERE
([dbo].[TableB].[InvoiceId] = @invid)
但这就是我得到的:
ID InvoiceId Payment Owed
1 1 150.00 NULL
3 1 120.00 850.00
4 1 100.00 1730.00
我需要在每一行总结之前的付款。
谢谢!
【问题讨论】:
-
什么版本的 SQL Server?
标签: sql sql-server select