2010-12-10 102 views
0

我想创建一个索引视图,例如T-SQL:问题在SQL Server中创建索引视图和GROUP BY 2008 R2

Select 
    Table1_ID, 
    cast(CONVERT(varchar(8), 
    t2.Object_CreationDate, 112)AS DateTime) as Object_CreationDate , 
    Count_BIG(*) as ObjectTotalCount 
    from 
     [dbo].Table2 t2 inner join [dbo].Table1 t1 on ... 
    Group BY 
     Table1_ID, CONVERT(varchar(8), t2.Object_CreationDate, 112)) 

我只需要通过列日期部分使组由Object_CreationDate(类型datetime2)。

另外我想设置索引Theme_IdObject_CreationDate列在派生视图。
如果我在SELECT中使用cast(CONVERT(varchar(8), m.Mention_CreationDate, 112)AS DateTime) - 我将在本专栏中遇到有关索引的问题。因为此列(Object_CreationDate)不确定。

我想知道是否有可能解决问题。

回答

3

替换...

CONVERT(varchar(8), t2.Object_CreationDate, 112)) 

...与

DATEADD(day, DATEDIFF(day, 0, t2.Object_CreationDate), 0) 
--OR 
CAST(t2.Object_CreationDate AS date) 

第2格式的SQL Server 2008+只,第一是更普遍的

这消除了时间组件从日期/日期时间数据类型域中的日期时间值没有任何中间语言环境相关的日期时间格式

看到这些答案:OneTwo(comments)

+0

谢谢,它有帮助。但是,当我尝试设置索引与命令创建唯一索引IX_Theme_ID_Object_CreationDate在[视图](Theme_ID,Object_CreationDate) - sql提供了一个错误,因为我没有这个视图上唯一的聚集索引,我不能添加此索引。 – 2010-12-10 13:24:18

+0

您需要完全按照错误消息所述标识“唯一聚簇索引”。也许是“Table1_ID”。如果没有索引viw的唯一密钥,SQL Server如何知道哪一行是什么? – gbn 2010-12-10 13:28:07

+0

好的,谢谢,我明白了 – 2010-12-10 13:31:11