【发布时间】:2016-08-04 10:37:02
【问题描述】:
我的数据库中有 3 个表:-
客户:
CId | CName | CLocation | CJoinDate
付款:
TxnId | TxStatus | TxComment | TxAmount | CId | TxDate
约会:
AppId | AppCode | CId | ADate | AComment
当我对两个表进行左连接时,计算结果会正确。但是当我尝试加入 3 个表时,计算的结果是错误的。
例如:-
如果我尝试这个查询,那么计算的总金额是正确的:
SELECT c.CName, sum(p.TxAmount)
FROM Customer c LEFT JOIN Payment p ON c.CId = p.CId
WHERE p.TxStatus = 1
GROUP BY c.CName;
在上面的查询中,我只是加入了两个表,这给了我正确的结果。
现在,当我想在一个表中显示所有记录时,我不得不加入 3 个表。 以下是我尝试过的查询:
SELECT c.CName as Name, sum(p.TxAmount) as Payment, count(distinct a.ADate) as Total_Visit
FROM Customer c LEFT JOIN Payment p ON c.CId = p.CId LEFT JOIN Appointment a ON c.CId = a.CId
WHERE p.TxStatus = 1
GROUP BY c.CName;
上面的查询给了我每个客户的错误付款金额。错误结果的原因是 Appointments 表与每个客户的 Payment 表相比具有更多的行。因此,为了显示所有约会条目,付款金额会重复,因为计算错误。
如何使用上述查询解决上述情况。
Tks
编辑:实际上还有 2-3 个表,我必须加入类似于 Appointment 表以及每个月的 GROUP BY 子句。
EDIT1:通过多个 CTE 修复它。感谢您的宝贵指点,它确实很有帮助。
【问题讨论】:
标签: sql-server join