使用两个表创建SQL查询

时间:2013-05-14 16:12:17

标签: sql

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

enter image description here

我目前有两个表帐户,其中列出了用户及其初始欠款和付款金额,其中包含用户付款的所有记录。我知道如何将表与JOIN合并,但我不知道如何进行所需数学以获得欠款和付款金额。

帐户中的列包括:ID,名称,帐户,借款
付款中的列包括: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。

3 个答案:

答案 0 :(得分: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

DEMO

答案 1 :(得分: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

答案 2 :(得分: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