Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/11/2011, 10h23   #1
Invité de passage
 
Inscription : avril 2008
Messages : 4
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 4
Points : 1
Points : 1
Par défaut Calcul d'évolution TSQL

Bonjour,


Novice sur SQL SRV 2k5.
Je souhaite faire la chose suivante :

Une table T_MOY: id, annee, indic_1,..5

T_MOY:
ID | ANNEE | INDIC_1 | INDIC_2 | evol
1 2007 100 50 ...
2 2008 200 75 ...
3 2009 100 150 ...
4 2010 300 100 ...

Je souhaite faire le calcul suivant:

( Somme(indic_1) pour l'année 2007 / Somme(indic_1) pour l'année MIN -1 ) -1

Pour indic_1:
Pour la premiere ligne ca donnerait : 0
Pour la ligne suivante : 100
( Somme(indic_1) pour l'année 2008 / Somme(indic_1) pour l'année 2007 ) -1

Je dois incrémenter les années en fonction de +1 et je ne vois pas comment faire cela en SQL ou TSQL. Je dois créer une boucle qui va compter de année = min(année) +1 jusqu'à année en cours -1 et réaliser le calcul pour chaque ligne et chaque indicateur.

en ce que quelqu'un à une idée? Est-ce assez clair ?

Merci de votre aide.
hhilton est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 12h05   #2
Invité de passage
 
Inscription : juillet 2010
Messages : 2
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 2
Points : 1
Points : 1
Par défaut Solution possible mais pas la meilleur

Bonjour,

Je suis pas trop d'accord avec les résultats de ton calcul (200/100)-1 = 1
Voila un exemple qui répond à ton problème:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
DECLARE @ANNEE_MIN INT
DECLARE @ANNEE_MAX INT
DECLARE @COMPTEUR INT
DECLARE @INDIC_A FLOAT
DECLARE @INDIC_A1 FLOAT
DECLARE @RESULTAT FLOAT
 
 
 
SELECT @ANNEE_MIN = MIN(ANNEE) FROM T_MOY
SELECT @ANNEE_MAX = MAX(ANNEE) FROM T_MOY
SET @COMPTEUR = @ANNEE_MIN
 
WHILE (@COMPTEUR <=@ANNEE_MAX)
BEGIN
SELECT @INDIC_A = SUM(INDIC_1) FROM T_MOY WHERE ANNEE = @COMPTEUR
SELECT @INDIC_A1 = SUM(INDIC_1) FROM T_MOY WHERE ANNEE = @COMPTEUR-1
SET @RESULTAT = (@INDIC_A/@INDIC_A1)-1
PRINT('ANNEE '+CONVERT(VARCHAR,@COMPTEUR)+':'+CONVERT(VARCHAR,@RESULTAT))
SET @COMPTEUR = @COMPTEUR+1
 
END
etienne56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 13h33   #3
Invité de passage
 
Inscription : avril 2008
Messages : 4
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 4
Points : 1
Points : 1
Merci etienne56 pour ta réponse.

en fait, tu as raison, mon calcul n'est pas tout à fait fait correct.
ca serait pluôt :

( Somme indicateur pour annee 2008 / somme indicateur pour l'année 2007 ) -1 / (n - 1 - ref)

( n - 1 - ref ) = 2011 - 1 - 2006
ref=2006.
hhilton est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 13h41   #4
Invité de passage
 
Inscription : avril 2008
Messages : 4
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 4
Points : 1
Points : 1
Pardon et n = année en cours (2011).
hhilton est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 13h52   #5
Nouveau Membre du Club
 
Homme
IED décisionnel
Inscription : mai 2011
Messages : 33
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : IED décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2011
Messages : 33
Points : 27
Points : 27
Donc tu as juste à ajouter une ligne qui fait le calcul
Etienne5685 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 14h20   #6
Invité de passage
 
Inscription : avril 2008
Messages : 4
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 4
Points : 1
Points : 1
je te remercie de ton aide.
hhilton est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h27.


 
 
 
 
Partenaires

Hébergement Web