Remplacement de valeurs pour formule de calcul

Résolu
anspauldou Messages postés 42 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 30 juin 2016 - 24 oct. 2009 à 13:38
Marroubi Messages postés 51 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 30 octobre 2009 - 30 oct. 2009 à 10:45
Bonjour

J'ai deux tables Formule et SaisieValeur
La table Formule contient :
Insert Into Formule (NumFormule, LibFormule)
Values ('01', (({a}+{b})*({c}-{d})/{e}))

La table SaisieValeur contient

Insert Into SaisieValeur (NumVal, Valeur)
Values (a, 2000)
Insert Into SaisieValeur (NumVal, Valeur)
Values (b, 1000)
Insert Into SaisieValeur (NumVal, Valeur)
Values (c, 500)
Insert Into SaisieValeur (NumVal, Valeur)
Values (d, 300)
Insert Into SaisieValeur (NumVal, ValeurNumeric)
Values (e, 1500)

je voudrais un script (procedure stockée ou fonction en SQL 2005) qui me permettra de remplacer les valeurs a,b,c,d,e de la table Formule par les valeurs de la colonne ValeurNumeric la table SaisieValeur de sorte à afficher en finale ((2000+1000)*(500-300)/1500).

Merci d'avance

5 réponses

Marroubi Messages postés 51 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 30 octobre 2009 2
30 oct. 2009 à 10:45
De rien mon ami,

tu peux maintenant marquer ta question comme Résolue dans la liste des questions.

Bonne Casse-Tête.
3
Marroubi Messages postés 51 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 30 octobre 2009 2
27 oct. 2009 à 12:55
bonjours anspauldou;

j'ai crée une base de données spécialement pour toi !!


et j'ai crée un proc qui permet de retourner le résultat comme tu indique ci-dessus .

Script de la création des tables:

USE [Teste]
GO
/****** Objet :  Table [dbo].[Formule]    Date de génération du script : 10/27/2009 11:47:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Formule](
[NumFormule] [nvarchar](50) NOT NULL,
[LibFormule] [nvarchar](50) NULL,
 CONSTRAINT [PK_Formule] PRIMARY KEY CLUSTERED 
(
[NumFormule] ASC
)WITH (PAD_INDEX  OFF, STATISTICS_NORECOMPUTE  OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]



USE [Teste]
GO
/****** Objet :  Table [dbo].[SaisieValeur]    Date de génération du script : 10/27/2009 11:47:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[SaisieValeur](
[NumVal] [nvarchar](50) NOT NULL,
[Valeur] [nvarchar](50) NULL,
 CONSTRAINT [PK_SaisieValeur] PRIMARY KEY CLUSTERED 
(
[NumVal] ASC
)WITH (PAD_INDEX  OFF, STATISTICS_NORECOMPUTE  OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


[*] Proc :
CREATE PROC GetFormule (@numFormule AS VARCHAR(2))
AS
BEGIN
DECLARE curValeur  CURSOR FOR SELECT * FROM saisieValeur
DECLARE @numValeur VARCHAR(1)
DECLARE	@valeur VARCHAR(3)

OPEN curValeur
FETCH NEXT FROM curValeur INTO @numValeur,@valeur

DECLARE @formule VARCHAR(50)
SET @formule=(SELECT LibFormule FROM formule WHERE NumFormule=@numFormule)

WHILE(@@fetch_status=0)
BEGIN
SELECT @numValeur,@valeur
DECLARE @caractere VARCHAR(1)
DECLARE @i INT
SET @i=0

WHILE(@i<len(@formule))
BEGIN
DECLARE @pos INT
SET @pos=(SELECT charindex(@numValeur ,@formule,@i))
SET @formule=isnull((SELECT STUFF(@formule,@pos, 1, @valeur)),@formule)
SET @i=@i+1
END
FETCH NEXT FROM curValeur INTO @numValeur,@valeur
END
SELECT @formule

CLOSE curValeur
DEALLOCATE curValeur
END

[*] l'exécution de proc :
EXEC Getformule '01'


Bonne Casse-tête.
0
anspauldou Messages postés 42 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 30 juin 2016
28 oct. 2009 à 12:35
Bonjour

Je te remercie encore une fois pour ton script qui marche bien sauf qu'il y a un petit souci dans la formulation de mon problème, je souhaite avoir la formule avec les parenthèses sans les accolades '{}' autour de mes valeurs à remplacer dans mes formules exemple :

en entrée de mon paramètre de procédure : (({a}+{b})*({c}-{d})/{e})
en sortie : ((2000+1000)*(500-300)/1500)
C'est ce que je voudrai en sortie.

Merci encore une fois
0
Marroubi Messages postés 51 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 30 octobre 2009 2
28 oct. 2009 à 12:58
de rien,
alors c'est simple:

changer cette ligne de code :

SET @formule=isnull((SELECT STUFF(@formule,@pos,1, @valeur)),@formule)


par :

SET @formule=isnull((SELECT STUFF(@formule,@pos-1,3, @valeur)),@formule)


Bonne Casse-tête.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
anspauldou Messages postés 42 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 30 juin 2016
30 oct. 2009 à 10:40
Bonjour

Je tiens encore une fois à te remercier pour ton aide j'ai testé et ça marche à merveille.

Cordialement
0
Rejoignez-nous