2012-03-29 44 views
1

创建索引使用SQL2005,我需要创建一个视图如下显示select语句:SQL上的查看与SUM()中选择

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指数视图?

谢谢!

+0

http://stackoverflow.com/q/2615617/1176601可能适用于你的问题.. – Aprillion 2012-03-29 18:28:19

回答

5

以下是创建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) 

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

+0

试过这个,它抱怨使用“MAX”...... – user651942 2012-03-29 18:37:52

+0

啊,索引视图不喜欢MAX 。要解决此问题,可以查看[由Adam Haines在此MSDN论坛帖子中提出的解决方案](http://social.msdn.microsoft.com/Forums/zh-CN/transactsql/thread/c93e0e03-f99d-4659 -a1f1-9fd04c9a4130 /),如果可能的话用'bit'列修改'kits_dropped',并且为最近的(MAX)'Call_Date'记录设置值为'1'。 – 2012-03-29 18:46:13

+5

'如果存在GROUP BY,则根据您在帖子中链接的手册页,VIEW定义必须包含COUNT_BIG(*)'。 – 2012-03-30 06:51:28