Parcourt de chaine et Formule de calcul

Messages postés
42
Date d'inscription
lundi 14 janvier 2002
Statut
Membre
Dernière intervention
30 juin 2016
- - Dernière réponse : 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.
Afficher la suite 

2 réponses

Messages postés
60
Date d'inscription
lundi 4 décembre 2006
Statut
Membre
Dernière intervention
11 janvier 2013
0
Merci
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
Commenter la réponse de cs_Tolliap
Messages postés
42
Date d'inscription
lundi 14 janvier 2002
Statut
Membre
Dernière intervention
30 juin 2016
0
Merci
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+
Commenter la réponse de anspauldou