【问题标题】:Incorrect Sum On Table Join表连接总和不正确
【发布时间】:2020-04-30 17:41:10
【问题描述】:

我正在写一个查询,但我得到了错误的结果。表格如下:

Tbl1(ProId, price,VId)
Tbl2(ProId, price, VId) 

我已经写了这个查询:

SELECT 
    a.ProId, b.ProId,
    SUM(a.price) - SUM(b.price) AS TotalPro
FROM 
    tbl1 AS a 
INNER JOIN 
    tbl2 AS b ON a.ProId = b.ProId
WHERE 
    a.VId = '1234'
GROUP BY 
    a.ProId, b.ProId; 

此查询返回的答案不正确。我所做的是分别将表一和表二的价格相加,减去它们,答案很好。但是当我加入时,我不知道为什么我得到了错误的答案。两个表中的 ProId 相同,值相同。

【问题讨论】:

  • 请分享样本数据和您想要的结果。我们不知道您对这个不正确的 sql 有什么期望,因此很难指导。不过,你的 sql 在语法上是正确的,fwiw。
  • 为什么不正确?你期望什么结果,你得到了什么结果?你的数据是什么样的?您拥有的表达式正在返回正确的值,但您的逻辑将是错误的。我的猜测,你有一个笛卡尔积,因为你没有单独聚合。你可能认为123之和与112233之和相同(显然,它们不是)。

标签: sql-server database tsql


【解决方案1】:

我猜你想要像下面这样的东西:

SELECT ProdId, SUM(price)
FROM (
  SELECT a.ProId,a.price
  FROM Tbl1 a
  WHERE a.VId='1234'
  UNION ALL 
  SELECT b.ProdId, -b.price
  FROM Tbl2 b
  --WHERE b.VId ='1234' (?)
 ) sub
GROUP BY ProdId;

JOIN 的问题是您可能有一些行被多次求和。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 2020-06-10
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多