2009-12-04 9 views
1

J'ai un problème avec une colonne de comptage à mon avis.Erreur lors de la création de la vue indexée

SELECT ColumnC, ColumnA % ColumnB AS ModuloColAColB, COUNT_BIG(*) AS cBig FROM dbo.T1 
GROUP BY ColumnC, ModuloColAColB 

Query est similaire à cet exemple MSDN: http://msdn.microsoft.com/en-us/library/ms191432.aspx

Lorsque je tente de compiler vue j'ai reçu un message d'erreur comme: « nom de colonne incorrect ModuloColAColB »

Je changer de groupe par colonne noms:

SELECT ColumnC, ColumnA % ColumnB AS ModuloColAColB, 
COUNT_BIG(*) AS cBig FROM dbo.T1 
GROUP BY ColumnC, ColumnA, ColumnB 

Vue compile correctement mais quand j'essaye d'ajouter l'index je reçois l'erreur:

"Cannot create the clustered index 'px_test' on view 'l' because the select list of the view contains an expression on result of aggregate function or grouping column. 
Consider removing expression on result of aggregate function or grouping column from select list" 

Lorsque je supprime "ColumnA% ColumnB AS ModuloColAColB" tout fonctionne très bien.

Version de la base de données: SQL Server 2005 Enterprise Edition.

+1

ce qui se passe lorsque vous utilisez GROUP BY ColumnC, ColumnA% ColumnB –

+0

Voir compile correctement mais ne peux pas créer un index – itdebeloper

Répondre

1

Essayez GROUP BY ColumnC, ColumnA % ColumnB?

De votre lien:

..cannot contain... An expression on a column used in the GROUP BY clause, or an expression on the results of an aggregate.

Je pense que cela signifie que vous ne pouvez pas modulo sur votre groupe par des colonnes. Cependant, vous devriez être en mesure de faire l'expression dans le GROUP BY et simplement répéter dans la clause select

+0

eh oui j'ai trouvé il ... l'exemple de cette page msdn ne fonctionne pas avec le serveur SQL: / – itdebeloper