Parcourt de chaine et Formule de calcul

anspauldou Messages postés 42 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 30 juin 2016 - 12 août 2010 à 14:08
anspauldou Messages postés 42 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 30 juin 2016 - 25 août 2010 à 20:45
Bonjour

J'ai deux tables dont l'une est Table_Formule et l'autre Table_Donnee. La table Table_Formule contient les informations suivantes :
insert into Table_Formule (NumLigne, Col_Formule)
Values (1, '{1001}*{1003}/{2004}')
insert into Table_Formule (NumLigne, Col_Formule)
Values (2, '({2005}+{1004})/({2004}*{1003}') bref j'ai plusieurs formules différentes par ligne.
Dans la table Table_Donnee j'ai les informations suivantes :
insert into Table_Donnee (CodeRef, ValeurRef)
Values ('1001', 2500)
insert into Table_Donnee (CodeRef, ValeurRef)
Values ('1003', 40)
insert into Table_Donnee (CodeRef, ValeurRef)
Values ('2004', 300)
insert into Table_Donnee (CodeRef, ValeurRef)
Values ('2005', 360)
insert into Table_Donnee (CodeRef, ValeurRef)
Values ('1004', 10)

Je voudrai un script qui me permettra d'avoir au final :
2500*40/300 selon la formule de la première ligne et
(360+10)/(300*40) selon la deuxième ligne. Ma table Table_Formule doit pouvoir contenir autant de combinaison possible de formule. La colonne ValeurRef contient du numeric.

Merci d'avance.

2 réponses

cs_Tolliap Messages postés 60 Date d'inscription lundi 4 décembre 2006 Statut Membre Dernière intervention 11 janvier 2013
25 août 2010 à 01:00
Bonjour,
Je ne sais pas ou tu es ai, mais voici une solution
ceci est une procédure qui reprend tes tables et colonnes que tu as renseigné sur ton poste.
Tu appel la procédure avec en paramètre le numéro de la ligne de la formule dont tu veut le résultat.

Create procedure ResultatFormule
 @NumLigne int
as

declare @formule varchar(400)
set @formule = (select Table_Formule.Col_Formule from Table_Formule where NumLigne=@NumLigne)
DECLARE tnames_cursor CURSOR
FOR 
select CodeRef, ValeurRef from Table_Donnee where @formule like '%{'+CodeRef+'}%'
OPEN tnames_cursor
DECLARE @CodeRef sysname
DECLARE @ValeurRef sysname
FETCH NEXT FROM tnames_cursor INTO @CodeRef, @ValeurRef
WHILE (@@FETCH_STATUS <> -1)
BEGIN
-------------------
set @formule = replace(@formule,'{'+@CodeRef+'}',@ValeurRef)

-------------------
FETCH NEXT FROM tnames_cursor INTO @CodeRef, @ValeurRef
END
CLOSE tnames_cursor
DEALLOCATE tnames_cursor

exec ('select '''+@formule+''' as Formule, '+@formule+' as Resultat')

Qui ne tente rien, n'a rien
0
anspauldou Messages postés 42 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 30 juin 2016
25 août 2010 à 20:45
Bonjour

J'ai testé ton script et certains points ne marchent pas et j'ai apporté mes modifications dont voici :
- Pour le
select CodeRef, ValeurRef from Table_Donnee where @formule like '%{'+CodeRef+'}%' j'ai opté pour select CodeRef, ValeurRef from Table_Donnee qui marche bien

-Pour le set @formule = replace(@formule,'{'+@CodeRef+'}',@ValeurRef)
j'ai opté pour le
Set @formule = replace(@formule,(Select '{'+ ltrim(rtrim(@@CodeRef)) + '}') ,@Valeur) car il ne voyait par '}'

Je te remercie infiniment

A+
0
Rejoignez-nous