【问题标题】:SUM result is double what it should beSUM 结果是应有的两倍
【发布时间】:2018-03-10 03:32:13
【问题描述】:

我遇到了一个问题,我的查询结果是应有的两倍。我的直接假设是,将其相加两次以产生此结果。我正在处理从标准表中选择的视图,但我无法在其他任何地方再次对其求和。我的下一个想法是,某处的连接必须创建重复项,这允许将相同的值相加两次并产生错误。

它的视野很大,但我已将其缩小到一个区域

SELECT

F.[Person],
PP.[Team],
SUM(F.[Figure])

from (                   
SELECT Distinct  Year([Date]) 'Year' 
,Month([Date]) 'Month'
,convert(varchar(3),Datename(Month,[Date])) 'Mth' 
,[Person]
from Figure F

Union all

Select Distinct
[Year]
,[Month]
,[Mth]
,[Person]

FROM Person P

)g

Left join [Person2] PP
on PP.Code = g.[Person] 

  GROUP BY 
  P.[Person],
  PP.[Team]

我觉得这可能与工会有关,但我以前从未真正见过这样的事情。任何人都可以帮助解释为什么这可能会产生双重总和或我如何消除此错误?

谢谢

【问题讨论】:

  • 尝试联合而不是联合所有?只是为了避免重复?
  • 添加具有预期输出的样本数据
  • 可能是因为persons2表的原因,如果PP.Code上有重复的话会导致总和错误
  • 我会尝试收集一些数据,但这很困难,因为它很大。连接会产生重复项有什么原因吗?我以前从未经历过这种情况。这可能是因为表中的非唯一性吗?
  • 感谢@MiloBellano,原来是工会所有

标签: sql sql-server sum duplicates


【解决方案1】:

正如你在评论中所说的 UNION 有效,我在这里发布答案,所以如果你愿意,你可以批准它:)

from (                   
Distinct  Year([Date]) 'Year' 
,Month([Date]) 'Month'
convert(varchar(3),Datename(Month,[Date])) 'Mth' 
,[Person]
from Figure F

Union  --all will includes dups, so let's use just union
Select Distinct
[Year]
[Month]
,[Mth]
,[Person]

FROM Person P

)g

Left join [Person2] PP
on PP.Code = g.[Person] 

 GROUP BY 
  P.[Person],
  PP.[Team]

很高兴我的帮助!

【讨论】:

    【解决方案2】:

    我怀疑您的表“Person2”在“代码”字段中有一些重复项。

    您通常希望 Code 是您的主键,这将使其唯一,但以防万一,您可以通过如下简单语句来检查:

    select
        Code,
        COUNT(Code)
    from
        Person2
    group by
        Code
    having
        COUNT(Code) >= 2
    order by 
        Code
    

    如果确实存在重复项,那么您需要确保删除重复项,或者有一个辅助字段可以加入(如果它们之间存在某些差异元素)。

    【讨论】:

      猜你喜欢
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 2020-01-15
      • 1970-01-01
      相关资源
      最近更新 更多