如何在MSACCESS中对不同的表列进行求和和减法

bar*_*san 0 sql database ms-access

我有三个名为:Student,StudentPayment和CreditAmount的表.我想展示一个学生欠学校多少钱的结果.在学生表中有一个名为TotalPayable的列,它是要支付给学校的总金额,在StudentPayment中有一个名为TotalPaid的列,它是每次付款时的总付款,在CreditAmount表中有一个名为CreditAmount的列.是学校给予学生的豁免金额.所以我提出了一个问题:

SELECT Student.TotalPayableAmount - 
       Sum(StudentPayment.TotalPaid, CreditAmount.WaiverAmount) AS Total_Due
  FROM (Student INNER JOIN StudentPayment ON Student.ID = StudentPayment.ID) 
 INNER JOIN CreditAmount ON (Student.ID = CreditAmount.ID) AND (Student.ID = CreditAmount.StudentID)
 GROUP BY Student.ID, Student.TotalPayableAmount, CreditAmount.WaiverAmount 
Run Code Online (Sandbox Code Playgroud)

但它显示错误.

实际上我想制作TotalPaid和CreditAmount的SUM,然后想要从student表中的TotalPayable中减去它.请有人帮我这个.提前致谢.

And*_*mar 5

对于join右侧的每一行,重复左侧的每一行.因此,有两笔付款和三个学分的学生最终将获得6行.如果你sum超过这个,你会得到错误的结果.

相反,您可以使用子查询来计算每个学生的总金额.由于子查询每个学生只返回一行,因此可以避免上面提到的行重复问题.例如;

select  Student.ID
,       Student.TotalPayableAmount - 
        iif(StudentPayment.TotalPaid is null, 0, StudentPayment.TotalPaid) -
        iif(CreditAmount.WaiverAmount is null, 0, CreditAmount.WaiverAmount)
from    (
        Student
        left join    
                (
                select  StudentID
                ,       sum(Paid) as TotalPaid
                from    StudentPayment
                group by
                        StudentID
                ) as StudentPayment
        on    StudentPayment.StudentID = Student.ID
        )
left join    
        (
        select  StudentID
        ,       sum(Waiver) as WaiverAmount
        from    CreditAmount
        group by
                StudentID
        ) as CreditAmount
on      CreditAmount.StudentID = Student.ID
Run Code Online (Sandbox Code Playgroud)