Я пытаюсь создать простой индексированный вид по запросу ниже. Но когда я пытаюсь создать уникальный кластерный индекс на нем, я получаю следующее сообщение об ошибке:SQL Server Indexed Views: не удается создать кластеризованный индекс, потому что список выбора содержит выражение в результате функции агрегата
Cannot create the clustered index '..' on view '..' because the select list of the view contains an expression on result of aggregate function or grouping column. Consider removing expression on result of aggregate function or grouping column from select list.
Запрос я использовал следующие:
SELECT
[Manufacturer]
,ISNULL(SUM([QAV]),0) as AvgQAV
,ISNULL(SUM([BackOrders$]),0)as AvgBackorder$
,DATEPART(year,[Date])as Year
,DATEPART(month,[Date])as Month
,[fixSBU]
,[DC Name]
FROM [dbo].[TABLE1]
Group By
[Manufacturer]
,DATEPART(year,[Date])
,DATEPART(month,[Date])
,[fixSBU]
,[DC Name]
Может кто-нибудь сказать мне возможную причину для этого ? Как вы можете видеть, я уже пользуюсь функцией ISNULL
.
Вы не можете создать индекс на основе агрегированных данных (т.е. SUM (BackOrders $)), потому что тогда каждый раз, когда вы изменяли базовую таблицу, индекс должен был повторно группировать/вычислять, а затем обновлять. Вы можете создать индекс в базовой таблице рейтинга с использованием столбцов, которые вы используете (fixSBU и [DC Name]), и это должно помочь вещи, если таблица большая, иначе забудьте индекс. – mohan111
@ mohan111, хотя базовые данные могут измениться, сумма по-прежнему является детерминированной функцией - поскольку она возвращает одинаковые результаты каждый раз, когда предоставляются одни и те же базовые данные. Я думаю, что это все равно должно работать (по крайней мере, из-за суммы) – Kritner