SQL 在 Select 中使用 SUM() 在视图上创建索引

Posted

技术标签:

【中文标题】SQL 在 Select 中使用 SUM() 在视图上创建索引【英文标题】:SQL Create Index on View with SUM() in Select 【发布时间】:2012-03-29 18:21:11 【问题描述】:

使用SQL2005,我需要创建一个视图来显示select语句如下:

select c1.personid, Max(c1.call_Date) Call_Date, Sum(s1.quantity) Num_Boxes,
from dbo.kits_dropped s1
inner join dbo.calls c1 on(c1.callsid = s1.callsid)
Where s1.product_name = 'Product X'
GRoup by c1.personid

如何在上面的视图中为 personID 创建索引?

谢谢!

【问题讨论】:

***.com/q/2615617/1176601 可能适用于您的问题.. 【参考方案1】:

这里是创建indexed views in SQL 2005 的指南。

这可能会让您入门,这显示了一个在 personid 上具有聚集索引的视图:

CREATE VIEW MyView WITH SCHEMABINDING AS 

SELECT 
        c1.personid, 
        MAX(c1.call_Date) AS Call_Date, 
        SUM(s1.quantity) AS Num_Boxes,
FROM dbo.kits_dropped s1
INNER JOIN dbo.calls c1 ON (c1.callsid = s1.callsid)
WHERE s1.product_name = 'Product X'
GROUP BY c1.personid

GO

CREATE UNIQUE CLUSTERED INDEX MyViewInd ON MyView(personid)

如果您遇到上述任何问题,请发表评论。

【讨论】:

啊,索引视图不喜欢 MAX。要解决此问题,您可以查看the solution proposed by Adam Haines in this MSDN forum post 并在可能的情况下使用bit 列修改kits_dropped,并将最新(MAX)Call_Date 记录的值设置为1 If GROUP BY is present, the VIEW definition must contain COUNT_BIG(*),根据您在帖子中链接的手册页。

以上是关于SQL 在 Select 中使用 SUM() 在视图上创建索引的主要内容,如果未能解决你的问题,请参考以下文章

SQL 语句 select sum(a) from table1 where b=3

VC++调试的基本快捷键

SQL Server:带有内部 SELECT 和子 SELECT 的 SUM()。每次都出错

在同一个 SELECT sql 查询中从 SUM() 计算百分比

带有 CASE 条件和 SUM() 的 SELECT 查询

SQL SUM() 函数