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

SQL Oracle Discussion :

Decode et group by


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Par défaut Decode et group by
    Bonsoir !

    Voilà mon cas !!

    J'obtiens la valeur d'un champ nom_image avec un decode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    decode(champ1, '', '', 1, champ2) nom_image
    Si ce champ nom_image n'est pas vide (et seulement dans ce cas) je souhaite le concaténer avec un champ code_image et une URL en dur sinon je laisse le tout à vide

    Pour cela je n'ai pas trouvé d'autre solution que de réutiliser un decode. Ce qui fait 2 decode imbriqués :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    decode(
      decode(champ1, '', '', 1, champ2) ,
      '', '',
      code_image ||'_'|| 'http://www.monurl.com/images/' ||decode(champ1, '', '', 1, champ2)
    )
    Mais du coup je n'arrive pas à écrire *mon group by sans obtenir une erreur ORA-00937

    En plus ce n'est qu'une partie d'une looooongue requête et ça complique les choses je pense.*

    Pouvez vous m'aider ?
    Est-ce qu'il y a une meilleure option que le decode ? Ou bien le group by peut être facilement écrit ?

    Merci !

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Decode est une très vieille fonction remplacée depuis des lustres par CASE.
    Votre première partie n'est nulle que si champ1 est nul, est différent de 1 ou si champ1 vaut 1 et champ2 est nul.

    Il suffit donc de l'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    case
      when champ1 is null 
        or (champ1 = 1 and champ2 is null)
        or champ1 <> 1
      then null
      else code_image || '_http://www.monurl.com/images/' || champ2
    end
    L'expression entière est à reprendre dans la clause group by de la requête.

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Dans le group by, comme dans le order by, on peut écrire l'index de la colonne (peut être pas sur tous les SGBD)
    En général quand je fais un CHAR ou un TRIM par exemple, je fauis group by 1, 2 plutôt que group by TRIM(champs1), CHAR(champs2)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Par défaut
    Merci à tous les 2, je vais tester ça immédiatement !

    Oui asmduty on peut faire ça et c'est une bonne idée, ma chef le fait souvent et moi je n'y pense jamais !!!

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,


    Je ferai très attention quand à l'utilisation de group by 1, 2.

    Il arrivera un moment où un developpeur rajoutera une colonne dans le select et ne se préocupera pas de l'order by ..et la c'est le drame :p

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Ouais enfin bon, si le développeur ne s'en préoccupe pas c'est qu'il ne fait pas correctement son boulot.
    Et avec le group by c'est pire, car s'il rajoute un champs dans la sélection et pas dans le gorup by, ça plantera de toute manière (sauf fonction) vu que tous le champs du select doivent être dans le group by.

  7. #7
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Citation Envoyé par asmduty Voir le message
    Dans le group by, comme dans le order by, on peut écrire l'index de la colonne (peut être pas sur tous les SGBD)
    En général quand je fais un CHAR ou un TRIM par exemple, je fauis group by 1, 2 plutôt que group by TRIM(champs1), CHAR(champs2)
    Selon le fonctionnel qui est derrière, on peut aussi se contenter d'un group by champs1, champs2.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ERREUR DECODE: group by
    Par antoine1504 dans le forum ODI (ex-Sunopsis)
    Réponses: 2
    Dernier message: 29/10/2009, 16h07
  2. pb avec Decode, group by
    Par aurelie83 dans le forum SQL
    Réponses: 1
    Dernier message: 05/11/2007, 16h12
  3. [Oracle] group by, decode, et distinct
    Par babylone7 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 12/02/2007, 13h11
  4. gestion des groupes
    Par muaddib dans le forum QuickReport
    Réponses: 3
    Dernier message: 31/12/2002, 11h01

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