Индексированные представления SQL Server: невозможно использовать выражение в операторе SELECT представления
Я пытаюсь использовать выражение в операторе SELECT для создания индексированного представления. В соответствии с рекомендациями MDSN для индексированных представлений выражения могут использоваться, если они являются детерминированными. К сожалению, когда я пытаюсь создать уникальный кластеризованный индекс по представлению, приведенному ниже, я получаю сообщение об ошибке, показанное ниже. Столбцы, для которых я выполняю выражения, были преобразованы в целочисленный тип данных, поэтому не должно быть и проблемы точности. Есть идеи, почему это выражение не работает?
Невозможно создать кластеризованный индекс ".." для представления "..", поскольку список выбора представления содержит выражение для результата статистической функции или столбца группировки. Попробуйте удалить выражение из результата статистической функции или столбца группировки из списка выбора.
ALTER VIEW [dbo].[Table2]
WITH SCHEMABINDING
AS
SELECT [Manufacturer]
,SUM([QAV]) / COUNT_BIG(*) AS AvgQAV
,SUM([BackOrders$]) / COUNT_BIG(*) AS AvgBackorder$
,DATEPART(year, [Date]) AS Year
,DATEPART(month, [Date]) AS Month
,[fixSBU]
,[DC Name]
,COUNT_BIG(*) AS NumRows
FROM [dbo].[Copy_IOPS2]
GROUP BY [Manufacturer]
,DATEPART(year, [Date])
,DATEPART(month, [Date])
,[fixSBU]
,[DC Name]
Спасибо!
2 ответа
Сообщение об ошибке говорит вам, что ему не нравятся агрегатные функции SUM и COUNT_BIG. Они не являются детерминированными, поскольку число строк в каждой группе, возвращаемое GROUP BY, может варьироваться в зависимости от выполнения.
Попробуй это,
ALTER VIEW [dbo].[Table2] WITH SCHEMABINDING AS
SELECT [Manufacturer] ,
SUM([QAV]),
COUNT_BIG(*),
SUM([BackOrders$]),
COUNT_BIG(*) AS AvgBackorder$ ,DATEPART(YEAR, [Date]) AS YEAR ,
DATEPART(MONTH, [Date]) AS MONTH ,
[fixSBU] ,
[DC Name] ,
COUNT_BIG(*) AS NumRows
FROM [dbo].[Copy_IOPS2]
GROUP BY [Manufacturer] ,
DATEPART(YEAR, [Date]) ,
DATEPART(MONTH, [Date]) ,
[fixSBU] ,
[DC Name]
SELECT [Manufacturer] , SUM([QAV]) / COUNT_BIG(*) AS AvgQAV,
SUM([BackOrders$]) / COUNT_BIG(*) AS AvgBackorder$, ,DATEPART(YEAR, [Date]) AS YEAR,
DATEPART(MONTH, [Date]) AS MONTH,
[fixSBU],
[DC Name] ,
COUNT_BIG(*) AS NumRows