2010-04-28 90 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