无法创建索引视图,因为我引用了派生表

时间:2014-12-02 21:42:46

标签: sql sql-server aggregate-functions sql-server-2014

我执行一个嵌套的SELECT来创建一个派生表hourly,它可以获得每小时特征可用性的平均值。使用hourly,我将所有这些值平均以获得每日平均值,并且我想创建每日平均值的索引视图。我的查询如下:

CREATE VIEW DailyView WITH SCHEMABINDING AS
SELECT hourly.Feature,
       AVG(hourly.AvgAvailability) AS AvgAvailability,
       CAST(hourly.DateTime AS date) AS Date FROM
       (SELECT DISTINCT 
                        SC.Feature,  
                        AVG(SA.Availability) AS AvgAvailability, 
                        SA.DateAndHour AS DateTime
       FROM   dbo.ServiceAvailability AS SA LEFT OUTER JOIN
              dbo.ServiceCatalog AS SC ON SA.ServiceID = SC.ServiceID
GROUP BY SC.Feature, SA.DateAndHour) hourly
GROUP BY hourly.Feature, CAST(hourly.DateTime AS date)
GO
CREATE UNIQUE CLUSTERED INDEX IDX_V1 ON DailyView(Date)
GO

但是,我无法以这种方式创建索引视图,因为我收到以下错误:

  

无法在视图上创建索引" Reporting.dbo.DailyView"因为它引用派生表"每小时" (由FROM子句中的SELECT语句定义)。请考虑删除对派生表的引用或不对视图编制索引。

对我来说,将这个视图编入索引非常重要,因为我们将处理大量数据,但我不知道如何在没有派生表的情况下获得嵌套平均值。

1 个答案:

答案 0 :(得分:1)

问题不在于子查询。 您无法在索引视图中使用AVG。请改用SUM和COUNT_Big,以便在查询此视图时可以计算平均值。 也不允许LEFT JOIN。只有INNER JOINs

在与正确的索引组合进行更改后,您可以检查是否可以为派生表创建索引视图。