voici le traitement que je souhaite faire:
- A partir d'une table qui a un champ semaine et un champ quantité, je veux
alimenter une autre table qui a 52 champs S1, S2, .........S52
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Steve Kass
Pierre-Yves,
Créez une table des nombres entiers de 1 à 52, et utilisez-la ainsi:
create table N52 ( n int not null primary key ) insert into N52 select top 52 ProductID from Northwind..Products go
select IDval, -- sum(case when Semaine = 1 then Qte else 0 end) as S1, sum(case when Semaine = 2 then Qte else 0 end) as S2, sum(case when Semaine = 3 then Qte else 0 end) as S3, ... sum(case when Semaine = 52 then Qte else 0 end) as S52 from T, N52 group by IDval go
La table N52 peut aussi vous aider à créer la plupart de la réquête (avec une virgule supplémentaire):
select 'sum(case when Semaine = ' + rtrim(n) + ' then Qte else 0 end) as S' + rtrim(n) + ',' from N52
Steve Kass Drew University
Pierre-Yves wrote:
Bonjour,
voici le traitement que je souhaite faire: - A partir d'une table qui a un champ semaine et un champ quantité, je veux alimenter une autre table qui a 52 champs S1, S2, .........S52
voici ce que je pourrais faire: insert into table1 (S1) select Qte from table2 where semaine = 1
cette requête serait à répéter 52 fois (ce qui est lourd et difficelement maintenable)
ou peut être faire du sql dynamique, ce qui n'est pas forcément très performant
Y aurait-il une autre solution?
merci pour vos réponses
Pierre-Yves,
Créez une table des nombres entiers de 1 à 52, et utilisez-la ainsi:
create table N52 (
n int not null primary key
)
insert into N52
select top 52 ProductID
from Northwind..Products
go
select
IDval, --
sum(case when Semaine = 1 then Qte else 0 end) as S1,
sum(case when Semaine = 2 then Qte else 0 end) as S2,
sum(case when Semaine = 3 then Qte else 0 end) as S3,
...
sum(case when Semaine = 52 then Qte else 0 end) as S52
from T, N52
group by IDval
go
La table N52 peut aussi vous aider à créer la plupart de la réquête
(avec une virgule supplémentaire):
select
'sum(case when Semaine = ' + rtrim(n)
+ ' then Qte else 0 end) as S' + rtrim(n) + ','
from N52
Steve Kass
Drew University
Pierre-Yves wrote:
Bonjour,
voici le traitement que je souhaite faire:
- A partir d'une table qui a un champ semaine et un champ quantité, je veux
alimenter une autre table qui a 52 champs S1, S2, .........S52
Créez une table des nombres entiers de 1 à 52, et utilisez-la ainsi:
create table N52 ( n int not null primary key ) insert into N52 select top 52 ProductID from Northwind..Products go
select IDval, -- sum(case when Semaine = 1 then Qte else 0 end) as S1, sum(case when Semaine = 2 then Qte else 0 end) as S2, sum(case when Semaine = 3 then Qte else 0 end) as S3, ... sum(case when Semaine = 52 then Qte else 0 end) as S52 from T, N52 group by IDval go
La table N52 peut aussi vous aider à créer la plupart de la réquête (avec une virgule supplémentaire):
select 'sum(case when Semaine = ' + rtrim(n) + ' then Qte else 0 end) as S' + rtrim(n) + ',' from N52
Steve Kass Drew University
Pierre-Yves wrote:
Bonjour,
voici le traitement que je souhaite faire: - A partir d'une table qui a un champ semaine et un champ quantité, je veux alimenter une autre table qui a 52 champs S1, S2, .........S52