Requêtes pivots sous MS-SQL Server
Bonjour,
J'utilise une requête pivot sous MS-SQL Server.
J'ai lu le cours de fadace sur ce sujet :
http://fadace.developpez.com/mssql/pivot/
Plusieurs exemples existent pour msql server pre-2005 (ce qui est mon cas).
J'ai opté pour la solution avec le curseur mais j'ai quelques erreurs.
Même en utilisant l'exemple indiqué, une erreur apparait
Voici l'exemple utilisé :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| Create table ventes
(produit char(1),
annee int,
vente float
)
insert into ventes values('A', 2005, 12000)
insert into ventes values('B', 2006, 15000)
insert into ventes values('C', 2005, 1000)
insert into ventes values('A', 2006, 12500)
insert into ventes values('C', 2004, 850)
insert into ventes values('B', 2004, 18000)
insert into ventes values('A', 2004, 10000)
insert into ventes values('C', 2003, 1100)
insert into ventes values('A', 2003, 9000)
declare @te varchar (2000)
declare c cursor for select distinct annee from ventes order by annee
declare @sql varchar(2000), @col int
set @sql=''
open c
fetch c into @col
while @@FETCH_STATUS = 0
begin
select @sql=@sql+'SUM( case when annee='+ cast(@col as varchar(30)) +' then vente else 0 end) as ['+ cast(@col as varchar(30)) +'],'
fetch c into @col
end
close c
deallocate c
SET @te = ('SELECT Produit, '+ left(@sql,len(@sql)-1) +' from Ventes group by Produit' )
Exec @te |
et voici l'erreur :
Citation:
Serveur*: Msg 203, Niveau 16, État 2, Ligne 35
Le nom 'SELECT Produit, SUM( case when annee=2003 then vente else 0 end) as [2003],SUM( case when annee=2004 then vente else 0 end) as [2004],SUM( case when annee=2005 then vente else 0 end) as [2005],SUM( case when annee=2006 then vente else 0 end) as [2006] from Ventes group by Produit' n'est pas un identificateur correct.
Est ce que quelqu'un aurait une idée ? merci