我有我的数据库3个表: -SQL服务器的多个JOIN:避免重复值
客户:
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;
上面的查询给了我错了付款金额为每一个客户。导致错误结果的原因是与每个客户的付款表相比,约会表具有更多的行。因此,要显示所有的约会条目,付款金额会得到重复计算错误。
如何解决上述情况与上述查询。
韩国社交协会
编辑:其实那里有2-3多个表,我有一个GROUP BY每月子句一起加入类同委任表格。
编辑1:修复它由多个CTE。感谢您宝贵的指点,这确实有帮助。
其实我有多个表加入。上述查询只是一个大问题的小问题。所以我想知道如果我们能够用JOIN来解决问题,我们可以做些什么。 – Villie
好的,你也可以为其他表使用子查询。考虑使用子查询和Pawel的CTE变体编写查询。那么使用执行计划成本最低的那个? –
我们是否可以使用带有GROUP BY子句的CTE或子查询,因为我已经显示给定年份的每个月的总数。 – Villie