【问题标题】:my join query returns inncorrect values我的联接查询返回不正确的值
【发布时间】:2016-08-25 07:40:02
【问题描述】:

当我查询 sql 服务器以从不同的三个表中检索记录时遇到问题,它对 SUM([Bills.Extrabill_dollar])SUM([Receipts.Amount]) 执行完全不正确的值,下面是我的查询,请帮助我。

select Customers.SNO, SUM(Bills.Extrabill_dollar) as [ExtraAmount],SUM(Receipts.Amount) as [Received]
from
Customers left join Bills on Customers.SNO=Bills.CustomerSNO
left join Receipts on Customers.SNO=Receipts.CSNO
group by Customers.SNO

但如果我使用下面两个单独的查询返回 SUM(Extra_dollar)SUM(Extra_dollar)
SELECT Bills.CustomerSNO as [CustomerSNO], SUM(Bills.Extrabill_dollar) AS [TotalExtraAmount] from Bills group by Bills.CustomerSNO

SELECT Receipts.CSNO as [CustomerSNO], SUM(Receipts.Amount) AS [TotalReveied] from Receipts group by Receipts.CSNO 将返回正确的结果,如果使用 JOIN 组合这些表将不会返回,请帮助我亲爱的。

【问题讨论】:

标签: sql-server database join


【解决方案1】:

说你得到了错误的答案,我不知道。

我认为由于您使用的是 LEFT JOIN,因此可能会导致问题。 左连接取客户的所有值,即使是不匹配的行也会出现,这将映射到 Bills and Receipts 下的 NULL 值。

您可以使用此代码并尝试一下。

SELECT Customers.SNO
, SUM(Bills.Extrabill_dollar) AS [ExtraAmount]
, SUM(Receipts.Amount) AS [Received]
FROM
Customers INNER JOIN Bills 
ON Customers.SNO=Bills.CustomerSNO
INNER JOIN Receipts 
ON Customers.SNO=Receipts.CSNO
GROUP BY Customers.SNO

【讨论】:

  • 尊敬的@Vishnu 完全尊重您的回答并没有解决我的问题,您只删除了空列但 [ExtraAmount] 和 [Received] 值仍然不正确,仍然需要您的帮助
  • 当我运行单独的查询(不加入 BILLS 和 RECEIPTS 表)来获取 [ExtraAmount] 和 [Received] 时,这将给出正确的值,但是当我使用 join 时,我得到的值不正确
  • 你需要告诉我你得到了什么以及你期待什么。只是说正确和错误的值我无法理解。
  • 例如,我得到 SUM(Extra_dollar) = 34 和 SUM(Amount) = 12 其中 Customer.SNO=2 ,但我希望得到 SUM(Extra_dollar) = 17 和 SUM(Amount) = 4 其中 Customer.SNO=2
【解决方案2】:
select Customers.SNO, SUM(Bills.Extrabill_dollar) as [ExtraAmount],SUM(Receipts.Amount) as [Received]
from
Customers right join Bills on Customers.SNO=Bills.CustomerSNO
right join Receipts on Customers.SNO=Receipts.CSNO
group by Customers.SNO

【讨论】:

  • 亲爱的@Ashu 显示以下消息:“关键字'where”附近的语法不正确。
  • “无法绑定多部分标识符“Customer.SNO””再说一遍。
  • 如果运行下面两个查询,它们将返回正确的值SELECT Receipts.CSNO as [CustomerSNO], Receipts.Amount as [RceivedAmount] from ReceiptsSELECT Bills.CustomerSNO as [CustomerSNO], Bills.Extrabill_dollar from Bills
  • 它什么也没显示,因为我没有拥有 SNO=1 的客户
  • 我希望所有客户的 SUM(Bills.Extra_dollar)SUM(Receipts.Amount)
【解决方案3】:

感谢大家的帮助,经过漫长的旅程我找到了答案

select c.SNO, c.CName, 
isnull((select SUM(PricePerKwt_dollar) from Bills
where Bills.CustomerSNO =c.SNO),0.00) as [TotalBills],
isnull((select SUM(Receipts.Amount) from Receipts
where Receipts.CSNO = c.SNO),0.00) as [TotalReceipts]
 from Customers c

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-28
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    相关资源
    最近更新 更多