WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 2012
-
30 déc. 2011 à 15:38
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 2012
-
3 janv. 2012 à 17:27
Bonjour à tous,
Supposons que j'ai une table temporaire créée et remplie comme suit :
DECLARE @__TableTemps TABLE
( nom char(1)
, priorite int
, temps int
)
insert into @__TableTemps values( 'A', 1, 10 )
insert into @__TableTemps values( 'B', 2, 15 )
insert into @__TableTemps values( 'C', 3, 10 )
insert into @__TableTemps values( 'D', 4, 12 )
insert into @__TableTemps values( 'E', 5, 8 )
insert into @__TableTemps values( 'F', 6, 18 )
insert into @__TableTemps values( 'G', 7, 2 )
insert into @__TableTemps values( 'H', 8, 3 )
insert into @__TableTemps values( 'I', 9, 9 )
J'aurais besoin de créer une seconde table dynamique selon les critères suivants:
[list]* Ajout d'autant de colonnes qu'il y a de lignes dans la table précédente.
* Et chaque colonne contiendra la somme du temps de la ligne en cours avec les précédentes lignes./list Au final la nouvelle table ressemblera à:
Nom priorite Temps ColA ColB ColC ColD ColE ColF ColG ColH ColI
A 1 10 0 0 0 0 0 0 0 0 0
B 2 15 15+10=25 0 0 0 0 0 0 0 0
C 3 10 10+10=20 10+15=25 0 0 0 0 0 0 0
D 4 12 12+10=22 12+15=27 12+10=22 0 0 0 0 0 0
E 5 8 8+10=18 8+15=23 8+10=18 8+12=20 0 0 0 0 0
F 6 18 etc...
G 7 2
H 8 3
I 9 9
J'aurais juste besoin d'un petit brainstorming, sur la meilleure manière à employer pour réaliser cela en SQL.
Merci d'avance pour vos contributions.
Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein
cgandco
Messages postés219Date d'inscriptionmercredi 26 octobre 2011StatutMembreDernière intervention22 juin 20179 31 déc. 2011 à 11:28
Bonjour,
A mon avis tu dois passer par un curseur sur ta table @__TableTemps
et ensuite utiliser du sql dynamique pour ajouter tes colonnes
c'est le plus simple que j'ai imaginé.
DECLARE @__TableTemps TABLE
( nom char(1)
, priorite int
, temps int
)
insert into @__TableTemps values( 'A', 1, 10)
insert into @__TableTemps values( 'B', 2, 15)
insert into @__TableTemps values( 'C', 3, 10)
insert into @__TableTemps values( 'D', 4, 12)
insert into @__TableTemps values( 'E', 5, 8)
insert into @__TableTemps values( 'F', 6, 18)
insert into @__TableTemps values( 'G', 7, 2)
insert into @__TableTemps values( 'H', 8, 3)
insert into @__TableTemps values( 'I', 9, 9)
DECLARE @cols varchar(2000) --- this could be an imput parameter
declare @nom char(1)
declare @priorite int
declare @temps int
declare @prevTemps int
set @prevTemps = 0
select * into #tmp from @__TableTemps
declare @sql varchar(2000)
declare @col varchar(2000)
DECLARE curseur CURSOR FOR
select
nom,priorite,temps
from
@__TableTemps
order by priorite
OPEN curseur;
FETCH NEXT FROM curseur
INTO @nom,@priorite,@temps;
WHILE @@FETCH_STATUS = 0
BEGIN
select @prevTemps temps from @__TableTemps where nom @nom
select @sql = 'ALTER TABLE #tmp ADD col' + @nom + ' int null'
exec(@sql)
select @sql 'update #tmp set col' + @nom + ' 0'
exec(@sql)
select @sql 'update #tmp set col' + @nom + ' temps + ' + convert(varchar(10),@prevTemps) + ' where priorite > ' + CONVERT(varchar(10),@priorite)
exec(@sql)
FETCH NEXT FROM curseur
INTO @nom,@priorite,@temps;
END
CLOSE curseur;
DEALLOCATE curseur;
select * from #tmp
drop table #tmp
Bonne journée
Faites simple, aussi simple que possible, mais pas simpliste.
A. Einstein.
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 31 déc. 2011 à 16:18
bonjour
@ cgandco : Merci pour ta réponse et surtout pour le temps passé à coder (je n'en demandai d'ailleurs pas autant).
Je regarderai plus en détail tout cela lundi, fêtes de fin d'année obligent...
@ tous les autres : Je suis toujours preneur pour d'autres propositions, c'est au départ un bainstroming
Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 3 janv. 2012 à 17:27
Bonjour
@ cgandco : J'attends vendredi, au plus tard, pour valider ta réponse (histoire de laisser le post ouvert aux éventuels retardataires de début d'année).
Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein