2016-12-13 35 views
0

我有一個存儲過程,它從兩個不同的表中獲取數據,並根據星期平均指標。來自一個表的數據看起來很好。然而,另一個則是所有星期重複的值。我已經多次檢查了源表並自己對數據進行了平均處理,數字應該都是不同的。存儲過程中的問題平均功能

這是存儲的proc有問題。

INSERT INTO Metrics 
(
    Application, 
    App1_Performance, 
    App1_Availability, 
    App2_Performance, 
    App2_Availability, 
    week, 
    Current_Week 
) 

SELECT 
    COALESCE (k.Application, n.Application) AS App, 
    AVG(k.Performance) AS App1_Perf, 
    AVG(k.Availability) AS App1_Avail, 
    AVG(n.Performance) AS App2_Perf, 
    AVG(n.Availability) AS App2_Avail, 
    COALESCE (DATEPART(wk, n.Timestamp), DATEPART(wk, k.Timestamp)) AS inputweek, 
    DATEPART(wk, GETDATE()) AS currentweek 
FROM Table1App1 k 
FULL OUTER JOIN Table2App2 n 
on k.Application = n.Application  
GROUP BY COALESCE (k.Application, n.Application), COALESCE (DATEPART(wk, n.Timestamp), DATEPART(wk, k.Timestamp)) 

我的結果是這樣的

App App1_Perf App1_Avail App2_Perf App2_Avail inputweek currentweek 
Site 0.740778 99.988252 0.154594 100.000000 50 51 
Site 0.740778 99.988252 1.852053 100.000000 49 51 
Site 0.740778 99.988252 0.200000 100.000000 46 51 
Site 0.740778 99.988252 0.140000 100.000000 47 51 
Site 0.740778 99.988252 0.143376 100.000000 48 51 
Site 0.740778 99.988252 0.151363 100.000000 51 51 

的應用2的數據看起來不錯,但應用1只是重複相同的價值觀。任何人都可以看到我在做任何錯誤的存儲過程會導致這種情況?

+0

打印沒有Agreggated函數或GROUP BY的查詢結果,您將看到錯誤。 –

+0

如果我記得我有類似問題的時間正確,我知道答案。這很微妙,但是您需要在DATEPART(wk,n.Timestamp)和DATEPART(wk,k.Timestamp)之間加入一個JOIN –

+0

我刪除了Aggregation和Group BY,並且該值是當前星期值。這解釋了App1顯示的價值是什麼,但爲什麼不適用於App2? – maltman

回答

1

更新您的FULL OUTER JOIN以將星期信息包含在聯接中,並且您應該擺脫該問題。

INSERT INTO Metrics 
(
    Application, 
    App1_Performance, 
    App1_Availability, 
    App2_Performance, 
    App2_Availability, 
    week, 
    Current_Week 
) 

SELECT 
    COALESCE (k.Application, n.Application) AS App, 
    AVG(k.Performance) AS App1_Perf, 
    AVG(k.Availability) AS App1_Avail, 
    AVG(n.Performance) AS App2_Perf, 
    AVG(n.Availability) AS App2_Avail, 
    COALESCE (DATEPART(wk, n.Timestamp), DATEPART(wk, k.Timestamp)) AS inputweek, 
    DATEPART(wk, GETDATE()) AS currentweek 
FROM Table1App1 k 
FULL OUTER JOIN Table2App2 n 
    on k.Application = n.Application 
    AND DATEPART(wk, n.Timestamp) = DATEPART(wk, k.Timestamp) 
GROUP BY COALESCE (k.Application, n.Application), COALESCE (DATEPART(wk, n.Timestamp), DATEPART(wk, k.Timestamp)) 
+0

繁榮。非常感謝你 – maltman