sql - 向 View 添加索引时出错

标签 sql sql-server tsql indexed-view

我使用以下代码创建了一个 View

CREATE VIEW dbo.two_weeks_performance WITH SCHEMABINDING
AS 
  SELECT dbo.day_dim.date_time AS Date, 
         dbo.order_dim.quantity AS Target_Acheived
    FROM dbo.day_dim 
    JOIN dbo.order_fact ON dbo.day_dim.day_id = dbo.order_fact.day_id 
    JOIN dbo.branch_dim ON dbo.order_fact.branch_id = dbo.branch_dim.branch_id 
    JOIN dbo.order_dim ON dbo.order_fact.order_id = dbo.order_dim.order_id   
GROUP BY dbo.order_dim.quantity, dbo.day_dim.date_time` 

现在当我使用:

CREATE UNIQUE CLUSTERED INDEX two_weeks_performance_I ON two_weeks_performance (Date)

我收到一个错误:

Cannot create index because its select list does not use the correct usage of COUNT_BIG(). Consider adding COUNT_BIG(*) to the select.

请帮我解决这个问题。

最佳答案

该错误准确地告诉您必须执行的操作 - 添加 COUNT_BIG(*) 到您的选择列表。

来自 Creating Indexed Views :

If GROUP BY is specified, the view select list must contain a COUNT_BIG(*) expression, and the view definition cannot specify HAVING, ROLLUP, CUBE, or GROUPING SETS.

CREATE VIEW dbo.two_weeks_performance WITH SCHEMABINDING
AS 
  SELECT dbo.day_dim.date_time AS Date, 
         dbo.order_dim.quantity AS Target_Acheived,
         COUNT_BIG(*) as Cnt 
    FROM dbo.day_dim 
    JOIN dbo.order_fact ON dbo.day_dim.day_id = dbo.order_fact.day_id 
    JOIN dbo.branch_dim ON dbo.order_fact.branch_id = dbo.branch_dim.branch_id 
    JOIN dbo.order_dim ON dbo.order_fact.order_id = dbo.order_dim.order_id   
GROUP BY dbo.order_dim.quantity, dbo.day_dim.date_time
GO
CREATE UNIQUE CLUSTERED INDEX two_weeks_performance_I ON two_weeks_performance (Date)

关于sql - 向 View 添加索引时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4201551/

相关文章:

sql - 不允许 UPDATE,因为该语句更新 View "table_name",该 View 参与联接并具有 INSTEAD OF UPDATE 触发器

java - 如何将 sql 查询的结果发布到 servlet 中?

sql - 在数据库或文件系统中处理的同步 INSERT/SELECT 事务或读/写操作

sql - 使用 XML PATH 时的额外字符

sql-server - 如何在 MS SQL Server 中执行行到列 SUMIF

sql - SQL - 使用 LIKE 进行多个值的部分匹配

php - 显示序列号

MYSQL - 选择满足许多计数条件的行

sql-server - 一列多行 SQL Server

sql-server - 在数据库中的任意位置查找值