【问题标题】:How to formulate a SQL Server indexed view that aggregates distinct values?如何制定聚合不同值的 SQL Server 索引视图?
【发布时间】: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 的索引视图约束?

【问题讨论】:

    标签: sql sql-server tsql aggregate indexed-view


    【解决方案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】:

    显然不可能。

    【讨论】:

      猜你喜欢
      • 2010-11-04
      • 1970-01-01
      • 2011-03-13
      • 2012-03-01
      • 2011-02-16
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 2011-07-16
      相关资源
      最近更新 更多