2017-09-28 33 views
0

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

它是一个大的看法,但我已经把范围缩小到一个区域

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] 

我感觉好像也许它是与工会,但香港专业教育学院从未真正见过这样的事。任何人都可以帮助,为什么这可能会创造双重总和或我可以如何消除这个错误?

感谢

+1

尝试union代替union all?只是为了避免dups? – MiloBellano

+1

添加示例数据与预期的输出 –

+0

可能是因为表persons2,如果任何重复上PP.Code那么它将导致错误的总和 – Rams

回答

1

正如评论你说工会的工作,我张贴在这里回答所以,如果你愿意,你可以批准它:)

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] 

高兴的是我的功劳!

0

我怀疑你的表“PERSON2”有场“代码”有些重复。

你通常期望代码是你的主键,这将使其成为唯一的,但为了以防万一,你可以通过一个简单的语句像检查:

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

如果的确是有重复的,那么你需要确保重复项被删除,或者有一个辅助字段加入(如果它们之间存在某些差异)。

相关问题