Puis-je utiliser la fonction decode pour implémenter la condition suivante:
if a=0 or a is null then return sum(a) ?
Quelqu'un a-t-il une idée?
Puis-je utiliser la fonction decode pour implémenter la condition suivante:
if a=0 or a is null then return sum(a) ?
Quelqu'un a-t-il une idée?
Essayer plutot l'instruction CASE. Mais cela a-t-il un sens d'ajouter 0 à NULL: le résultat doit être 0 car SUM ne prend pas en compte les valeurs nulles.
C'est dans une requete ou en PL/SQL ?
Mais dans une requête, voila qui devrait être mieux :
Code : Sélectionner tout - Visualiser dans une fenêtre à part DECODE(NVL(a,0),0,sum(a),a)
Si une des lignes contient NULL alors la somme retourne NULL
Code : Sélectionner tout - Visualiser dans une fenêtre à part NVL(sum(a),0)![]()
et non!Envoyé par Fred_D
pour simplifier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SQL> select sum(a) from (select 1 a from dual union select null from dual); SUM(A) ---------- 1
je ferais
Code : Sélectionner tout - Visualiser dans une fenêtre à part case when a=0 or a is null then sum(a) end
mais c'est un peu pervers
Code : Sélectionner tout - Visualiser dans une fenêtre à part decode(a,0,0)
Envoyé par nkongolo.m
![]()
Envoyé par Fred_D
moi j'aurais écris ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part DECODE(NVL(a,0),0,sum(a),a)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SQL> select a,decode(nvl(a,0),0,sum(a),a) decode from (select 0 a from dual union select 2 from dual union select null from dual) group by a order by a; A DECODE ---------- ---------- 0 0 2 2 NULL NULL
bon pour faire des sommes dans une requête avec des conditions tu peux mettre ca :
normalement , quand la condition est vérifié , le produit decode(a,0,1,0)*nvl(a,1) retourne 1 , donc on retient le a dans la sommation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select sum(decode(a,0,1,0)*nvl(a,1)*a) resultat from ma_table;
quand la condition n'est pas vérifiée , on a un 0 qui met le produit à 0, donc on ne tient pas compte du a.
Est ce que cela répond à ta question ?
ou alors, plus simplement,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select sum(decode(a,0,1,0)*nvl(a,1)*a) resultat from ma_table;
Code : Sélectionner tout - Visualiser dans une fenêtre à part select 0 resultat from ma_table group by null;
ben ouais, les deux requêtes sont équivalentes, quel que soit le contenu de ma_tableEnvoyé par Process Linux
quand je fais un poste , je donne le principe. j'essaye d'aider les autres, et sourtout je n'essaye jamais de me foutre de la gueule des autres, on est tous ici pour apprendre
Pour revenir à la quetion initiale, et si je l'ai bien comprise : compter les lignes de la table laTable où la colonne a est NULL ou vaut 0
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT SUM(DECODE(a, 0, 1, NULL, 1, 0)) FROM laTable
Et c'est pas plus simple le simple count ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT count(*) FROM laTable WHERE nvl(a, 0) = 0
Envoyé par Process Linux
si tu ne veux rien apprendre de moi, c'est ton problème, mais ta requête est bidon, et ce n'est pas une moquerie.
le problème ne vient en fait pas de la réponse mais de la question, qui est mal posée![]()
il faudrait demander à l'utilisateur un exemple, en quoi la requête doit être elle différente de sum(a).
allez, sans rancune
![]()
Il y a un lecteur qui a bien perçu mon problème, j'ai besoin de disposer en une requête du nombre de lignes dont une colonne contient null ou 0.
J'ai pu trouver au travers des réponses beaucoup de moyens de solutionner la chose: MERCI A TOUS.
Bonne journée.
Envoyé par nkongolo.m
:-)
Code : Sélectionner tout - Visualiser dans une fenêtre à part select count(decode(a,0,1,null,1)) from t;
J'ai supposé qu'il y avait d'autres conditions et d'autres colonnes sélectionnées dans la requête.Envoyé par McM
Partager