SUM结果是应该的两倍

时间:2017-09-28 11:44:10

标签: sql sql-server sum duplicates

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

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

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]

我觉得这可能与联盟有关,但我以前从未见过这样的事情。任何人都可以帮助解决为什么这可能会产生双重数额或如何删除此错误?

由于

2 个答案:

答案 0 :(得分: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]
很高兴我帮忙了!

答案 1 :(得分:0)

我怀疑你的表“Person2”在“Code”字段上有一些重复。

您通常希望Code是您的主键,这会使其独一无二,但为了以防万一,您可以通过一个简单的声明来检查:

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

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