OVH Cloud OVH Cloud

SQL dynamique

1 réponse
Avatar
Pierre-Yves
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

ex:
table 1
--------
Semaine Qte
1 20
2 45
3 65
4 80

table 2
-----------
S1 S2 S3 S4
20 45 65 80

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

1 réponse

Avatar
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

ex:
table 1
--------
Semaine Qte
1 20
2 45
3 65
4 80

table 2
-----------
S1 S2 S3 S4
20 45 65 80

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