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 :

Spécification d'une colonne en fonction d'un resultat


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut Spécification d'une colonne en fonction d'un resultat
    Bonjour à tous,

    J'utilise fréquement la requete simplifiée ci dessous :

    Select client,
    Max( CASE WHEN ROROLE=1 THEN 'Emetteur a;' ELSE NULL END)||
    Max( CASE WHEN ROROLE=2 THEN ''Emetteur b;' ELSE NULL END)|| ' ' A
    From matable

    Cette requete me permet d'extraire le nom des clients d'une table + de savoir si un client est "Emetteur a" et/ou "Emetteur b" ou rien du tout en alignant le résultat sur 2 colonne

    Sur Excell, l'extraction s'affiche de la manière suivante (3 colonnes différentes):

    Colonne 1 Colonne 2 Colonne 3
    Client1 Emetteur a Emetteur b
    Client2 Emetteur b Emetteur a
    Client3 Emetteur b (cellule vide)

    "Emetteur a" ou "emetteur b" s'affichent indifféremment en colonne 2 ou 3 (je suppose que cela dépend de qui a ou b a été renseigné en 1er en base)

    Existe t il un moyen pour forcer la mise en forme de l'extraction. A savoir :
    - Si un client est ROROLE=1 alors "Emetteur a" s'affiche dans la colonne 2
    - Si un client n'est pas ROROLE=1 alors la colonne 2 est vide
    - Si un client est ROROLE=2 alors "Emetteur b" s'affiche dans la colonne 3
    - Si un client n'est pas ROROLE=2 alors la colonne 3 est vide

    MERCI d'avance pour votre retour

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Au lieu de NULL, mettez un espace.

  3. #3
    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
    Oui vous pouvez, au lieu de faire une concaténation il suffit de définir une colonne supplémentaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      select client,
             max(case rorole when 1 then 'Emetteur a' end) as colonne2
             max(case rorole when 2 then 'Emetteur b' end) as colonne3
        from matable
    group by client

  4. #4
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut Spécification d'une colonne en fonction d'un résultat
    Merci pour vos 2 réponses.

    Voici la requete que j'ai faite suite à vos 2 réponses (rotiers correspond à clients du message précédent) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select rotiers,rorole,
    	max (case rorole when 1 then 'Emeteur a' end) as colonne2
    	max (case rorole when 2 then Emeteur b' end) as colonne3
    from x.rolestiers
    Group by rotiers;
    Voici le message que me donne l'extraction :
    ORA-01756: quoted string not properly terminated

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Citation Envoyé par Jackola Voir le message
    Merci pour vos 2 réponses.

    Voici la requete que j'ai faite suite à vos 2 réponses (rotiers correspond à clients du message précédent) :

    select rotiers,rorole,
    max (case rorole when 1 then 'Emeteur a' end) as colonne2
    max (case rorole when 2 then Emeteur b' end) as colonne3
    from x.rolestiers
    Group by rotiers
    ;

    Voici le message que me donne l'extraction :
    ORA-01756: quoted string not properly terminated
    Il manque une apostrophe devant "Emeteur b" dans votre script.

  6. #6
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    oops, désolé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select rotiers,rorole,
    	max(case rorole when 1 then 'Emeteur a' end) as colonne2
    	max(case rorole when 2 then 'Emeteur b' end) as colonne3
    from exane.rolestiers
    Group by rotiers
    ;
    Maintenant le message est le suivant :

    max(case rorole when 2 then 'Emeteur b' end) as colonne3
    *
    ERROR at line 3:
    ORA-00923: FROM keyword not found where expected

  7. #7
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut Spécification d'une colonne en fonction d'un resultat
    Bonjour à tous,

    1 / Je souhaiterai rajouter une valeur qui dépend d'une condition dans une 4ème colonne :

    Si 'emetteur a' apparait en colonne 2 alors la colonne 4 contient la valeur 'TP'.
    Sinon 'TS'

    2 / Je souhaite ensuite filtrer le résultat de la requête : ne garder que les lignes avec 'TP' en colonne 4.

    Ci dessous mon code pour la partie 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      SELECT rotiers,
             max(case rorole when 1 then 'Emetteur a' end) AS colonne2,
             max(case rorole when 2 then 'Emetteur b' end) AS colonne3,
             min(case when rorole=1 then 'TP' else 'TS' end) as colonne4
        FROM x.rolestiers
    GROUP BY rotiers;
    Je bute sur la partie 2.

    Merci d'avance pour votre aide.

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Par défaut
    bonjour,
    pourquoi ne pas ajouter dans la clause where un test sur rorole
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      SELECT rotiers,
             max(case rorole when 1 then 'Emetteur a' end) AS colonne2,
             max(case rorole when 2 then 'Emetteur b' end) AS colonne3,
             min(case when rorole=1 then 'TP' else 'TS' end) AS colonne4
        FROM x.rolestiers
        WHERE rorole=1
    GROUP BY rotiers;
    sinon il faut utiliser HAVING
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      SELECT rotiers,
             max(case rorole when 1 then 'Emetteur a' end) AS colonne2,
             max(case rorole when 2 then 'Emetteur b' end) AS colonne3,
             min(case when rorole=1 then 'TP' else 'TS' end) AS colonne4
        FROM x.rolestiers
    GROUP BY rotiers
    HAVING min(case when rorole=1 then 'TP' else 'TS' end)='TP';

  9. #9
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    J'opte pour le Having!!

    Merci beaucoup

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 07/05/2009, 16h41
  2. Somme d'une colonne en fonction d'une autre
    Par j.mathieu dans le forum Excel
    Réponses: 6
    Dernier message: 16/08/2008, 14h55
  3. Réponses: 6
    Dernier message: 18/12/2007, 06h36
  4. somme de valeurs d'une colonne en fonction d'autres colonnes
    Par youness78 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 02/08/2007, 19h31
  5. Contraite NULL sur une colonne en fonction d'une autre colon
    Par speedy1496 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2004, 19h29

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