Obtenir un nom de colonne non valide à l'aide d'un tableau croisé dynamic

J'ai ce SQL:

Select FirstName, LastName, Hours, Case When DatePart(Weekday, Date) = 1 Then Date - 6 Else Date - DatePart(Weekday, Date) + 2 End [WeekOf], IsNull([Week44], 0) as [Week44], IsNull([Week45], 0) as [Week45], IsNull([Week46], 0) as [Week46], IsNull([Week47], 0) as [Week47], IsNull([Week48], 0) as [Week48] from ( Select FirstName, LastName, Hours, Date, 'Week' + Case When DatePart(Weekday, Date) = 1 Then Cast(DatePart(ww, Date - 6) as nvarchar(max)) Else Cast(DatePart(ww, Date - DatePart(Weekday, Date) + 2) as nvarchar(max)) End WeekNo From Entry Where Date between '11/1/2013' and '11/30/2013' ) alpha pivot ( sum(Hours) for WeekNo in ([week44], [week45], [week46], [week47], [week48]) ) p 

Pour autant que je puisse voir, tout va bien, mais je continue à avoir cette erreur:

 Msg 207, Level 16, State 1, Line 1 Invalid column name 'Hours'. 

Vous ne pouvez pas utiliser une colonne agrégée comme colonne non pivotée. Vous ne pouvez pas avoir des heures comme colonne dans votre jeu de résultats. Je crois que quelque chose ne va pas dans la logique.

Essaye ça:

 Select FirstName , LastName , [week44], [week45], [week46], [week47], [week48] from ( Select FirstName , LastName , Hours , Date , 'Week' + Case When DatePart(Weekday, Date) = 1 Then Cast(DatePart(ww, Date - 6) as nvarchar(max)) Else Cast(DatePart(ww, Date - DatePart(Weekday, Date) + 2) as nvarchar(max)) End WeekNo From Entry Where Date between '11/1/2013' and '11/30/2013' ) alpha pivot ( sum(Hours) for WeekNo in ([week44], [week45], [week46], [week47], [week48]) ) p 

L'accord est que datatables [Hours] sont maintenant dans la colonne [weekXX] et ne sont plus un élément de données disponible pour la récupération.

Je crois que vous avez juste besoin d'envelopper les mots-keys [Heures], [Date], [Jour de la semaine].