Индексированное представление и T-SQL, которые дают те же результаты, что и в SQL Server 2008 R2

StackOverflow https://stackoverflow.com/questions/4470869

Вопрос

Я хочу создать индексированный вид Мой взгляд с таким T-SQL

Select 
    o.Theme_ID as Theme_ID,
    DATEADD(day, DATEDIFF(day, 0, o.Object_CreationDate), 0) as Objext_CreationDate,
    Count_BIG(*) as ObjectCount,   o.Object_Tonality from [dbo].Object o
inner join [dbo].Theme t on o.Theme_ID = t.Theme_ID
inner join [dbo].[ThemeWorkplace] tw on t.Theme_ID = tw.Theme_ID
inner join [dbo].Workplace w on w.Workplace_ID = tw.Workplace_ID
 ... where t.Theme_DeletedMark = 0
 AND (w.Workplace_AccessType = 1 OR w.Workplace_AccessType = 8)
 AND Object_DeletedMark = 0 ...
 Group BY o.Theme_ID,o.Object_Tonality, DATEADD(day, DATEDIFF(day, 0, o.Object_CreationDate), 0)

Этот T-SQL работает нормально и позволяет установить кластерный индекс на Мой взгляд.

Проблема в этой таблице ThemeWorkplace содержит несколько записей с одинаковыми Theme_IDАнкет И даже я использую GROUP BY - Я захожу Object_Count ценность этого
равно: (реально Object_Count значение) * Считается (Theme_ID в ThemeWorkplace ).

Я не могу использовать DISTINCT Слово в T-SQL, потому что в этом случае невозможно создать индекс в виде.

Какое предложение может получить правильные результаты, на мой взгляд?

Это было полезно?

Решение

Как вы отмечали, существуют значительные ограничения на создание индексированного представления. Методы, которые могут помочь вам здесь, такие как различные или подзадность, запрещены. Я думаю, что вам нужно пожертвовать материализацией взгляда в данном конкретном случае.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top