2017-09-28 60 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 

如果的確是有重複的,那麼你需要確保重複項被刪除,或者有一個輔助字段加入(如果它們之間存在某些差異)。

相關問題