IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Decode pour un if avec or dans la condition


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Par défaut Decode pour un if avec or dans la condition
    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?

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    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.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Par défaut
    c'est plutôt count() et non sum

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    C'est dans une requete ou en PL/SQL ?

  5. #5
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut Re: Decode pour un if avec or dans la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECODE(NVL(a,0),0,sum(a),a)
    Mais dans une requête, voila qui devrait être mieux :

    Si une des lignes contient NULL alors la somme retourne NULL

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut Re: Decode pour un if avec or dans la condition
    Citation Envoyé par Fred_D
    Si une des lignes contient NULL alors la somme retourne NULL
    et non!

    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
    pour simplifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    case when a=0 or a is null then sum(a) end
    je ferais
    mais c'est un peu pervers

  7. #7
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    ha oui...

    M'enfin... mon DECODE fonctionne

  8. #8
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par nkongolo.m
    c'est plutôt count() et non sum

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par Fred_D
    ha oui...

    M'enfin... mon DECODE fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECODE(NVL(a,0),0,sum(a),a)
    moi j'aurais écris ç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

  10. #10
    Membre éprouvé Avatar de Process Linux
    Inscrit en
    Septembre 2003
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 136
    Par défaut
    bon pour faire des sommes dans une requête avec des conditions tu peux mettre ca :
    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;
    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.
    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 ?

  11. #11
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    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;
    ou alors, plus simplement,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select 0 resultat from ma_table group by null;

  12. #12
    Membre éprouvé Avatar de Process Linux
    Inscrit en
    Septembre 2003
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 136
    Par défaut
    Citation Envoyé par laurentschneider
    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;
    ou alors, plus simplement,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select 0 resultat from ma_table group by null;
    : : :

  13. #13
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par Process Linux
    Citation Envoyé par laurentschneider
    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;
    ou alors, plus simplement,
    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_table

  14. #14
    Membre éprouvé Avatar de Process Linux
    Inscrit en
    Septembre 2003
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 136
    Par défaut
    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

  15. #15
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    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

  16. #16
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    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

  17. #17
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation 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
    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



  18. #18
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Par défaut MERCI A TOUS
    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.

  19. #19
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut Re: MERCI A TOUS
    Citation Envoyé par nkongolo.m
    j'ai besoin de disposer en une requête du nombre de lignes dont une colonne contient null ou 0.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(decode(a,0,1,null,1)) from t;
    :-)

  20. #20
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Citation Envoyé par McM
    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
    J'ai supposé qu'il y avait d'autres conditions et d'autres colonnes sélectionnées dans la requête.

Discussions similaires

  1. Comment faire pour utiliser plusieurs fonctions logiques dans une condition ?
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 04/11/2010, 12h37
  2. Réponses: 5
    Dernier message: 05/08/2009, 18h51
  3. _attribut dans build.xml pour Fichier MANIFEST avec Ant_
    Par geeky_girl dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 05/11/2007, 15h31
  4. Réponses: 3
    Dernier message: 20/04/2007, 15h06
  5. Réponses: 2
    Dernier message: 29/10/2005, 21h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo