2010-04-28 1 views
3

У меня есть схема, которая включает в себя таблицу, как следующая схема (псевдо):Как сформулировать индексированное представление SQL Server, которое объединяет различные значения?

TABLE ItemCollection { 
    ItemCollectionId 
    ...etc... 
} 

TABLE Item { 
    ItemId, 
    ItemCollectionId, 
    ContributorId 

} 

мне нужно агрегировать число различных доноров в ItemCollectionId. Это возможно с запросом, как:

SELECT ItemCollectionId, COUNT(DISTINCT ContributorId) FROM Item 
GROUP BY ItemCollectionId 

Я также хочу, чтобы заранее рассчитать эту агрегацию, используя индексированный (материализованный) вид. DISTINCT предотвращает размещение индекса на этом представлении. Есть ли способ переформулировать это, что не будет нарушать индексированные ограничения SQL Server?

ответ

0
SELECT 
    ItemCollectionId, 
    COUNT(DISTINCT ContributorId), 
    COUNT_BIG(*) AS DummyColumn 
FROM Item 
GROUP BY ItemCollectionId 

Агрегатная потребует COUNT_BIG (*) as mentioned in MSDN.

Это также говорит «нет DISTINCT» и я не уверен (никогда не пробовал, извините), если это относится к его использование в совокупности (как есть) или SELECT DISTINCT...

+0

Никаких кубиков, DISTINCT убивает его, как только вы пытаетесь создать кластеризованный уникальный индекс. – jlew

+0

@Jeremy Lew: в этом случае вам придется поддерживать таблицу с помощью триггера, я боюсь ... – gbn

 Смежные вопросы

  • Нет связанных вопросов^_^