2016-12-13 49 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