|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : septembre 2009 Messages : 9 ![]() |
Bonjour,
Je ne trouve pas le moyen de faire un taux de variation annuel moyen (par exemple de la population entre 1999 et 2007). La formule est : Racine nième ((valeur 2007 - valeur 1999) / valeur 1999 ) (n étant le nombre d'année) En SQL (sql server), j’exécute donc la requête : Code :
et j'obtiens 1 pour tous les enregistrements (p07_pop et p99_pop étant en real) J'ai tenté la conversion : Code :
convert(float ,POWER (sum(p.p07_pop)-sum(p.p99_pop), 1/8),2) AS 'Variation annuelle moyenne de la pop entre 1999 et 2007' Avez-vous des idées ? ![]() Merci |
||
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 520 ![]() |
pb de conversion de type ?
Que donne cette bidouille ? Code :
Et quelque chose exposant 0 = 1...
__________________
les règles du forum - mode d'emploi du forum Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur) JE NE RÉPONDS PAS aux questions techniques par message privé. Écrire en français sur un forum est une marque minimale de respect. |
||
|
|
00
|
|
|
#3 | ||
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Tout à fait.
l'opération 1/8 donnera 0 ici car le résultat sera un entier. POWER(X, 0) est toujours égale à 1. 7gyY9w1ZY6ySRgPeaefZ vous a donné la solution. Vous pouvez utiliser 1.0 / 8 ou 1. / 8 dans votre cas. Attention également à ne pas avoir de valeurs négatives pour sum(1.0*p.p07_pop)-sum(1.0*p.p99_pop) car ceci engendrerait une erreur de ce type : Code :
|
||
|
00
|
|
|
#4 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Et pour le dernier cas soulevé par mikedavem il suffit de placer UN CASE et renvoyer NULL en cas de valeur négative.
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : septembre 2009 Messages : 9 ![]() |
MErci des réponses...
Par contre, avec cette requête : Code sql :
POWER (nullif(sum(1.0*p.p07_pop)-sum(1.0*p.p99_pop),0), 1.0/8),2) J'obtiens le message d'erreur : Avertissement*: une erreur de domaine s'est produite. Msg*0, Niveau*11, État*0, Ligne*0 Une erreur grave s'est produite sur la commande actuelle. Les résultats éventuels doivent être ignorés. WTF ? |
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 520 ![]() |
que vaut ceci ?
__________________
les règles du forum - mode d'emploi du forum Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur) JE NE RÉPONDS PAS aux questions techniques par message privé. Écrire en français sur un forum est une marque minimale de respect. |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : septembre 2009 Messages : 9 ![]() |
Code sql :
sum(1.0*p.p07_pop)-sum(1.0*p.p99_pop) Ce code marche bien ... C'est la puissance inverse qui provoque ce message d'erreur ... Pour info, quand je tente la requête sur un enregistrement (une commune), le résultat est bien renvoyé ... mais je dois mettre en place des sommes Sinon, n'y a-t-il pas de syntaxe pour une racine nième (au lieu de passer par la puissance inverse) ? |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com