2010-04-28 88 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的索引視圖約束?

回答

2

不可能的,顯然。

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

彙總將需要COUNT_BIG(*)as mentioned in MSDN

這也說:「沒有明顯的」,我不知道(從來沒有嘗試過,抱歉)這是否適用於它在一個綜合應用(如你),或SELECT DISTINCT...

+0

沒有骰子,只要嘗試創建聚簇唯一索引,DISTINCT就會立即殺死它。 – jlew 2010-04-28 19:33:49

+0

@Jeremy Lew:在這種情況下,您將不得不使用觸發器維護一張表格,恐怕... – gbn 2010-04-29 04:44:24