【发布时间】:2018-03-28 18:47:09
【问题描述】:
我正在为我的一位医生客户编写一个我认为相对简单的 Access DB,他的诊所很小。我无法报告患者的余额。
我有 3 张桌子:
Patients (id, [First Name], [Last Name], {other cols})
Treatments (id, Fee, Patient_id, {other cols})
Payments (id, Amount, Patient_id, {other cols})
我想要一个查询来简单地显示治疗的总费用、支付的总金额和当前余额。我写了以下...
Select
Patients.[Last Name],
Patients.[First Name],
SUM(select SUM(Treatments.Fee) from Treatments Where Treatments.Patient=@PatientID)
AS CHARGES,
SUM(select SUM(PAYMENTS.AMOUNT) from PAYMENTS Where PAYMENTS.Patient=@PatientID)
AS PAYMENTS,
SUM(
(select SUM(Treatments.Fee) from Treatments Where Treatments.Patient=@PatientID)
- (select SUM(PAYMENTS.AMOUNT) from PAYMENTS Where PAYMENTS.Patient=@PatientID)
)
as Balance
FROM Patients,Treatments,PAYMENTS
WHERE Patients.ID = @PatientID
GROUP BY Patients.[Last Name],Patients.[First Name]
费用和付款栏工作正常,但我得到的余额很奇怪。以下是基于:
- 该患者的 5 个治疗条目,金额为 50,25,35,45,125 (280)。
- 3 个付款条目的金额,15,60,25 (100)。
我希望: 费用 = 280 美元,付款 = 100 美元,余额 = 180 美元
但我得到: 费用 = 280 美元,付款 = 100 美元,余额 = 2,700 美元
【问题讨论】:
-
为什么要使用子查询?
标签: sql tsql ms-access ms-access-2016