所以我试图在我这里的示例视图上创建一个索引。起初我有COUNT_BIG错误,所以我添加了,但现在我得到了这个错误
无法创建聚簇索引...因为视图的选择列表包含结果上的表达式 聚合函数或分组列。
SELECT
SALE_DATE,
DATEPART(YEAR, SALE_DATE) AS SALE_YEAR,
CAST(DATEADD(MONTH, DATEDIFF(MONTH, 0, SALE_DATE), 0) AS DATE) AS SALE_MONTH,
CAST(DATEADD(QUARTER, DATEDIFF(QUARTER, 0, SALE_DATE), 0) AS DATE) AS SALE_QUARTER,
REGION,
A_ID,
B_ID,
ISNULL(SUM(SALE_VALUE), 0) AS SALE_VALUE,
ISNULL(SUM(ADV_COMM), 0) AS ADV_COMM,
ISNULL(SUM(CASH_COMM), 0) AS CASH_COMM,
...
and a load more SUM columns in the exact same format
...
COUNT_BIG(*) AS COUNT
FROM dbo.sale_data
GROUP BY SALE_DATE, REGION, A_ID, B_ID
CREATE UNIQUE CLUSTERED INDEX CIX_View_daily_sale_data
ON view_daily_sale_data_test(SALE_DATE, A_ID, B_ID, REGION);
我已经尝试了一切来解决这个问题,删除分组,更改我索引的列,删除CAST,我已经阅读了很多地方只要包含COUNT_BIG,就可以包含SUM。
有人可以解释一下我在这里做错了什么。谢谢!
答案 0 :(得分:1)
错误信息不难解码:
包含表达式
ISNULL(...)
关于聚合函数的结果
SUM(...)
因此,您不能再对聚合函数的结果做任何事情。
在这里,我建议创建一个只执行SUM()
操作的视图,并对其进行索引,然后,如果需要,另一个只查询第一个视图的视图未编入索引,并包含ISNULL()
个表达式。查询第二个视图(如果使用了适当的提示,或者你是一个好的SKU),仍然应该从第一个视图的索引中获益。