Sql 总和结果是它应该的两倍

Sql 总和结果是它应该的两倍,sql,sql-server,sum,duplicates,Sql,Sql Server,Sum,Duplicates,我遇到了一个问题,我的查询结果是应该的两倍。我的直接假设是,这是两次求和,以产生这个结果。我处理的是一个从标准表中选择的视图,我在其他任何地方都找不到它被再次求和。我的下一个想法是,某个地方的连接必须创建重复项,这允许相同的值被求和两次并产生错误 这是一个大的视野,但我已经把它缩小到一个区域 SELECT F.[Person], PP.[Team], SUM(F.[Figure]) from ( SELECT Distinct Year([Date])

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

这是一个大的视野,但我已经把它缩小到一个区域

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]
我觉得这可能与工会有关,但我以前从未见过这样的事情。有人能帮我解释一下为什么会产生双倍和,或者我如何消除这个错误吗


谢谢

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

您通常希望代码是您的主键,这将使其具有唯一性,但为了以防万一,您可以通过以下简单语句进行检查:

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

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

正如您在评论中所说的联合有效,我在这里发布答案,以便您可以批准它:

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]

很高兴我帮忙了

尝试联合而不是全体联合?只是为了避免重复?添加具有预期输出的样本数据可能是因为表persons2,如果PP代码上存在任何重复,则会导致错误的sumI将尝试收集一些数据,但由于数据量大,因此很难。联接会创建重复项有什么原因吗?我以前从未经历过这种情况。这可能是因为表格中的非唯一性造成的吗?谢谢@MiloBellano,原来这是整个联盟