如何制定聚合不同值的 SQL Server 索引视图?
Posted
技术标签:
【中文标题】如何制定聚合不同值的 SQL Server 索引视图?【英文标题】:How to formulate a SQL Server indexed view that aggregates distinct values? 【发布时间】:2011-02-13 12:06:26 【问题描述】:我有一个包含如下表的架构(伪架构):
TABLE ItemCollection
ItemCollectionId
...etc...
TABLE Item
ItemId,
ItemCollectionId,
ContributorId
我需要汇总每个 ItemCollectionId 的不同贡献者的数量。这可以通过如下查询来实现:
SELECT ItemCollectionId, COUNT(DISTINCT ContributorId) FROM Item
GROUP BY ItemCollectionId
我还想使用索引(物化)视图预先计算此聚合。 DISTINCT 防止在此视图上放置索引。有什么方法可以重新制定这不会违反 SQL Server 的索引视图约束?
【问题讨论】:
【参考方案1】:SELECT
ItemCollectionId,
COUNT(DISTINCT ContributorId),
COUNT_BIG(*) AS DummyColumn
FROM Item
GROUP BY ItemCollectionId
聚合将需要 COUNT_BIG(*) as mentioned in MSDN。
这也表示“没有 DISTINCT”,我不确定(从未尝试过,抱歉)这是否适用于它在聚合中的使用(如您所见),或者 SELECT DISTINCT...
【讨论】:
没有骰子,只要您尝试创建聚集唯一索引,DISTINCT 就会杀死它。 @Jeremy Lew:在这种情况下,恐怕你必须使用触发器来维护一个表......【参考方案2】:显然不可能。
【讨论】:
以上是关于如何制定聚合不同值的 SQL Server 索引视图?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server 中的滑动窗口上聚合(计算不同的项目)?
SQL Server 索引视图:无法创建聚集索引,因为选择列表包含聚合函数结果的表达式