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?
Version imprimable
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 plutôt count() et non sum
C'est dans une requete ou en PL/SQL ?
Mais dans une requête, voila qui devrait être mieux :Code:DECODE(NVL(a,0),0,sum(a),a)
Si une des lignes contient NULL alors la somme retourne NULL :)Code:NVL(sum(a),0)
et non!Citation:
Envoyé par Fred_D
pour simplifierCode:
1
2
3
4
5 SQL> select sum(a) from (select 1 a from dual union select null from dual); SUM(A) ---------- 1
je feraisCode:case when a=0 or a is null then sum(a) end
mais c'est un peu perversCode:decode(a,0,0)
ha oui... :oops:
M'enfin... mon DECODE fonctionne :ange:
:lol:Citation:
Envoyé par nkongolo.m
Citation:
Envoyé par Fred_D
moi j'aurais écris çaCode:DECODE(NVL(a,0),0,sum(a),a)
:pleure:Code:a
Code:
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:
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:
1
2 select sum(decode(a,0,1,0)*nvl(a,1)*a) resultat from ma_table;
Code:select 0 resultat from ma_table group by null;
:?: :?: :?:Citation:
Envoyé par laurentschneider
ben ouais, les deux requêtes sont équivalentes, quel que soit le contenu de ma_tableCitation:
Envoyé 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:
1
2 SELECT SUM(DECODE(a, 0, 1, NULL, 1, 0)) FROM laTable
Et c'est pas plus simple le simple count ?
Code:
1
2
3 SELECT count(*) FROM laTable WHERE nvl(a, 0) = 0
:furieux: 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.Citation:
Envoyé par Process Linux
le problème ne vient en fait pas de la réponse mais de la question, qui est mal posée :sm:
il faudrait demander à l'utilisateur un exemple, en quoi la requête doit être elle différente de sum(a).
allez, sans rancune
:bebe:
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.
Citation:
Envoyé par nkongolo.m
:-)Code: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.Citation:
Envoyé par McM