Sql server 获取付款总额减去收到的金额
我有两张桌子 1.发票Sql server 获取付款总额减去收到的金额,sql-server,tsql,group-by,common-table-expression,Sql Server,Tsql,Group By,Common Table Expression,我有两张桌子 1.发票 invoice_Id invoice_no client_id date total_price ----------------------------------------------------------------------------- 2 INV00001 9 2014-10-15 200.00 7 INV00002 9 20
invoice_Id invoice_no client_id date total_price
-----------------------------------------------------------------------------
2 INV00001 9 2014-10-15 200.00
7 INV00002 9 2014-10-16 560.00
8 INV00003 9 2014-10-21 100.00
11 INV00004 9 2014-10-27 101.00
2.发票和付款
InvPayment_id client_id Invoice_Id receipt_no payment_date amount_received discount
--------------------------------------------------------------------------------------------
6 9 8 REC00002 2014-10-31 5.00 0.00
现在我想通过合计发票金额并减去收到的任何金额来获得客户应付的总金额
预期结果:
client_id Total_price Due_Amount
-----------------------------------------------------------------------------
9 961.00 956.00
注:
;WITH cte (clientid, invoiceid, paid, disc)
As
(
Select client_id clientId, invoice_Id invoiceId, sum(amount_received) paid, sum(discount) disc
From tbl_Invoice_Payment
Group by invoice_id, client_id
)
Select I.client_id, invoice_Id, invoice_no, I.due_date
,SUM(I.total_price), Isnull(SUM(paid), 0) Paid, (SUM(Total_price) - Isnull(SUM(paid),0) - Isnull(SUM(disc),0)) Balance
--,I.total_price, Isnull(paid, 0) Paid, (Total_price - Isnull(paid,0) - Isnull(disc,0)) Balance
From tbl_invoice I Left join cte On I.client_id = cte.clientId
And I.invoice_id = cte.invoiceid
left join tbl_client C on C.client_id = I.client_id
group by I.client_id, invoice_Id, invoice_no, due_date, account_type, company_name, total_price, paid, disc
order by company_name
但是它没有按预期工作。您可以简单地添加子查询以返回支付结果,并从总额中减去该值,而不是使用CTE: 架构设置:
CREATE TABLE Invoice
([invoice_Id] int, [invoice_no] varchar(8), [client_id] int,
[date] datetime, [total_price] decimal(5,2));
INSERT INTO Invoice
([invoice_Id], [invoice_no], [client_id], [date], [total_price])
VALUES
(2, 'INV00001', 9, '2014-10-15 00:00:00', 200.00),
(7, 'INV00002', 9, '2014-10-16 00:00:00', 560.00),
(8, 'INV00003', 9, '2014-10-21 00:00:00', 100.00),
(11, 'INV00004', 9, '2014-10-27 00:00:00', 101.00);
CREATE TABLE Invoice_Payment
([InvPayment_id] int, [client_id] int, [Invoice_Id] int, [receipt_no] varchar(8),
[payment_date] datetime, [amount_received] decimal(5,2), [discount] int);
INSERT INTO Invoice_Payment
([InvPayment_id], [client_id], [Invoice_Id], [receipt_no], [payment_date],
[amount_received], [discount])
VALUES
(6, 9, 8, 'REC00002', '2014-10-31 00:00:00', 5.00, 0.00);
查询以生成输出::
SELECT i.client_id , SUM(i.total_price) AS Total_price,
SUM(i.total_price) - ( SELECT SUM(ip.amount_received)
FROM dbo.Invoice_Payment ip
WHERE i.client_id = ip.client_id
) AS DueAmount
FROM dbo.Invoice i
WHERE client_id = 9
GROUP BY client_id
| CLIENT_ID | TOTAL_PRICE | DUEAMOUNT |
|-----------|-------------|-----------|
| 9 | 961 | 956 |
:
SELECT i.client_id , SUM(i.total_price) AS Total_price,
SUM(i.total_price) - ( SELECT SUM(ip.amount_received)
FROM dbo.Invoice_Payment ip
WHERE i.client_id = ip.client_id
) AS DueAmount
FROM dbo.Invoice i
WHERE client_id = 9
GROUP BY client_id
| CLIENT_ID | TOTAL_PRICE | DUEAMOUNT |
|-----------|-------------|-----------|
| 9 | 961 | 956 |
请选择所需的值。这个问题与分组有关
在
分组依据
条款客户id
,发票id
,发票编号
,到期日
,账户类型
,公司名称
,总价
,已付
,光盘
,指定了这么多字段<代码>发票Id,发票编号
阻止您需要的分组。从中删除invoice\u Id
和invoice\u no
,然后选择和分组依据
,然后重试。太好了。查询中有一些修改,但我已使其正常工作。谢谢