1

我需要一些帮助来为以下结果创建查询:

在此处输入图像描述

我目前有两个表 Accounts,其中列出了用户以及他们最初的欠款和 Payments,其中包含用户支付的所有记录。我知道如何将表与 JOIN 合并,但我不知道如何进行计算以获取欠款和支付金额。

Accounts 中的列包括:ID、Name、Account、Borrowed
Payments 中的列包括:ID、AcctID、PaymentAmt

我需要一个查询,将这两个表结合起来并进行数学运算,以显示用户当前支付了多少,以及用户从初始借入的金额中还欠了多少。

示例表数据:

帐户表

ID = 3,姓名 = Joe,帐户 = 业务,借用 = 100.00

付款表

ID = 1,AcctID = 3,PaymentAmt = 10.00
ID = 2,AcctID = 3,PaymentAmt = 10.00

我在 C# 中使用 MS SQL。

4

3 回答 3

3

您只需要加入,然后使用 SUM 和 GROUP BY。

SELECT a.Name ,
       a.Account ,
       a.Borrowed  - COALESCE(SUM(p.PaymentAmt),0) as [Still Owes],
       COALESCE(SUM(p.PaymentAmt),0) as Paid,
       a.Borrowed
FROM  
       ACCOUNTS  a
       LEFT JOIN PAYMENTS p
       ON a.ID = p.AcctID 
GROUP BY
       a.Name ,
       a.Account ,
       a.Borrowed

请注意,在没有付款的情况下,我进行了 LEFT JOIN。这也需要使用 COALESCE 将 Null SUM 转换为 0

演示

于 2013-05-14T16:16:53.143 回答
2

这应该这样做:

SELECT  A.[Name], 
        A.Account,
        A.Borrowed - ISNULL(P.Paid,0) [Still Owes],
        ISNULL(P.Paid,0) Paid,
        A.Borrowed
FROM Accounts A
LEFT JOIN ( SELECT  AcctID,
                    SUM(PaymentAmt) Paid
            FROM Payments 
            GROUP BY AcctID) P
    ON A.ID = P.AcctID
于 2013-05-14T16:17:15.303 回答
0
select  a.Name
,       a.Account
,       a.Borrowed - coalesce(sum(p.PaymentAmt),0) as [Still Owes]
,       coalesce(sum(p.PaymentAmt),0) as Paid
,       a.Borrowed
from    Accounts a
left join
        Payments p
on      p.AcctID = a.ID
group by
        a.Name
,       a.Account
,       a.Borrowed
于 2013-05-14T16:16:56.783 回答