| |
Posté le 29 novembre 2005 - 13:51 |
Bonjour a tous,
voici ma requete SQL SELECT STATS.TROIS_PTS_OK / (STATS.LF_KO + STATS.LF_OK) * 100 AS POURCENTAGE_TROIS FROM EQUIPE, MATCH, STATS WHERE EQUIPE.ID_EQUIPE = MATCH.ID_EQUIPE AND MATCH.ID_MATCH = STATS.ID_MATCH
Elle ne fonctionne pas lorsque (STATS.LF_KO + STATS.LF_OK) = 0
je suppose que le problème vient du fait que je veux diviser par 0
Comment dois je procéder pour que cela focntionne ?
il n'existe pas une commade CASE : select CASE when (STATS.LF_KO + STATS.LF_OK) = 0 then 0 when (STATS.LF_KO + STATS.LF_OK) > 0 then STATS.TROIS_PTS_OK / (STATS.LF_KO + STATS.LF_OK) * 100
ou une fonction ISNULL(valeur, valeur si nulle, valeur si non nulle)
Merci de votre aide ... |
| |
| |
| | | |
|
| | |
| |
Posté le 29 novembre 2005 - 15:15 |
Merci Pierre d'avoir pris le temps de me repondre. Mais si je fais ce que vous dites, la ligne n'apparait pas or je veux qu'elle s'affiche...avec par exemple des ZEROS
il ne s'agit pas d'une clause, mais juste de modifier l'affichage du select en cas de tentative de division par zero ...
Je ne sais si j'ai été clair ... |
| |
| |
| | | |
|
| | |
| |
Posté le 29 novembre 2005 - 15:51 |
WHERE (STATS.LF_KO + STATS.LF_OK)>0
"Laurent" <guchon13@hotmail.com> a écrit dans le message de news: 438c4866@news.pcsoft.fr...
Bonjour a tous,
voici ma requete SQL SELECT STATS.TROIS_PTS_OK / (STATS.LF_KO + STATS.LF_OK) * 100 AS POURCENTAGE_TROIS FROM EQUIPE, MATCH, STATS WHERE EQUIPE.ID_EQUIPE = MATCH.ID_EQUIPE AND MATCH.ID_MATCH = STATS.ID_MATCH
Elle ne fonctionne pas lorsque (STATS.LF_KO + STATS.LF_OK) = 0
je suppose que le problème vient du fait que je veux diviser par 0
Comment dois je procéder pour que cela focntionne ?
il n'existe pas une commade CASE : select CASE when (STATS.LF_KO + STATS.LF_OK) = 0 then 0 when (STATS.LF_KO + STATS.LF_OK) > 0 then STATS.TROIS_PTS_OK / (STATS.LF_KO + STATS.LF_OK) * 100
ou une fonction ISNULL(valeur, valeur si nulle, valeur si non nulle)
Merci de votre aide ...
|
| |
| |
| | | |
|
| | |
| |
Posté le 29 novembre 2005 - 16:47 |
Pourquoi pas lancer la requête suivante et calculer après en utilidant du code :
SELECT STATS.TROIS_PTS_OK ,STATS.LF_KO ,STATS.LF_OK) FROM EQUIPE, MATCH, STATS WHERE EQUIPE.ID_EQUIPE = MATCH.ID_EQUIPE AND MATCH.ID_MATCH = STATS.ID_MATCH
if STATS.LF_KO + STATS.LF_OK<>0 then POURCENTAGE_TROIS = STATS.TROIS_PTS_OK / (STATS.LF_KO + STATS.LF_OK) * 100 else POURCENTAGE_TROIS = 0 endif |
| |
| |
| | | |
|
| | |
| |
Posté le 29 novembre 2005 - 17:17 |
Il s'agit d'une base hyperfile sous SYBASE un select case ferait l'affaire ou select isnull()
Quant à la reponse de WALTER C, j'utilise cette requete dans une table, je choisi donc les champs de la requete a afficher, je ne sais donc pas si je peux modifier et recalculer de nouvelles valeurs...
J'essaie !
Merci a vous deux |
| |
| |
| | | |
|
| | |
| |
Posté le 29 novembre 2005 - 17:34 |
c quoi comme base (sql server ?)
"Laurent" <guchon13@hotmail.com> a écrit dans le message de news: 438c5c31$1@news.pcsoft.fr...
Merci Pierre d'avoir pris le temps de me repondre. Mais si je fais ce que vous dites, la ligne n'apparait pas or je veux qu'elle s'affiche...avec par exemple des ZEROS
il ne s'agit pas d'une clause, mais juste de modifier l'affichage du select en cas de tentative de division par zero ...
Je ne sais si j'ai été clair ...
|
| |
| |
| | | |
|
| | |
| |
Posté le 29 novembre 2005 - 17:35 |
Bonjour, Effectivement le Case existe mais sous SQLserver (Pour les autres bases je ne sais point).
CASE WHEN Boolean_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ] END pour le ISNULL ( check_expression , replacement_value )
SELECT
STATS.TROIS_PTS_OK / ISNULL((STATS.LF_KO + STATS.LF_OK), 1) * 100 AS POURCENTAGE_TROIS FROM EQUIPE, MATCH, STATS WHERE EQUIPE.ID_EQUIPE = MATCH.ID_EQUIPE AND MATCH.ID_MATCH = STATS.ID_MATCH
sinon une autre possiblité et de pacer par un select ..... (les cas non null avec un test sur la somme <> 0) UNION select .... (Les cas égaux à 0)
@+ |
| |
| |
| | | |
|
| | |
| |
Posté le 29 novembre 2005 - 19:19 |
SELECT CASE WHEN STATS.LF_KO + STATS.LF_OK = 0 THEN 0 ELSE STATS.TROIS_PTS_OK / (STATS.LF_KO + STATS.LF_OK) * 100 END AS POURCENTAGE_TROIS
"Laurent" <guchon13@hotmail.com> a écrit dans le message de news: 438c78ab$1@news.pcsoft.fr...
Il s'agit d'une base hyperfile sous SYBASE un select case ferait l'affaire ou select isnull()
Quant à la reponse de WALTER C, j'utilise cette requete dans une table, je choisi donc les champs de la requete a afficher, je ne sais donc pas si je peux modifier et recalculer de nouvelles valeurs...
J'essaie !
Merci a vous deux
|
| |
| |
| | | |
|
| | |
| |
Posté le 30 novembre 2005 - 10:32 |
Philip a écrit :
Bonjour, Effectivement le Case existe mais sous SQLserver (Pour les autres bases je ne sais point).
sous Mysql (4.1.10a) ça fonctionne très bien : select case when num_poste='b' then 'caisse B' else 'caisse A' end from ticket where datfct='20051129'
-- Jacques Trepp Albygest - 81160 - St Juery jacques-pas de spam.trepp@free.fr (enlever '-pas de spam' pour me joindre) http://www.albygest.com |
| |
| |
| | | |
|
| | |
| |
Posté le 30 novembre 2005 - 19:44 |
Merci a tous, mais le isnull ou le case ne fonctionne pas sous HYPERFILE ou je l'ai mal ecrit
Quand au fait d'utiliser le UNION, le probleme c'est que j'ai une multitude de division ...
commment puis je faire ...je suis toujours coincié !!
Merci pour votre aide ! |
| |
| |
| | | |
|
| | |