存储过程平均功能问题

时间:2016-12-13 19:15:54

标签: sql-server stored-procedures

我有一个存储过程,它从两个不同的表中获取数据,并根据周来平均指标。一个表中的数据看起来很好。然而,另一个是所有周重复的相同值。我已多次检查源表并自行平均数据,数字应该都不同。

这是有问题的存储过程。

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

App2的数据看起来不错,但App1只重复相同的值。任何人都可以在存储过程中看到我做错的任何事情会导致这种情况吗?

1 个答案:

答案 0 :(得分: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))