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 :

Probleme sur requete conditionnelle


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 129
    Points : 44
    Points
    44
    Par défaut Probleme sur requete conditionnelle
    Bonjour,

    J'ai un soucis pour rédiger une requete SQL, voila ce que j'aimerais faire :

    J'ai une 1ere requete :

    SELECT * FROM AUTO WHERE COULEUR="NOIR"

    Et si cette requete ne retourne rien je voudrais

    SELECT * FROM AUTO WHERE COULEUR="BLEU"


    En une seule requête c'est possible ?

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous pouvez probablement bidouiller ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT *
    FROM
        (
        SELECT au.*,
               row_number() over(order by case COULEUR when 'NOIR' then 1 else 2 end asc) rn
          FROM AUTO au
         WHERE COULEUR IN ('NOIR', 'BLEU')
        )
    WHERE rn = 1

  3. #3
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Waldar, je dirais juste dense_rank à la place de row_number

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Pas nécessairement, ça dépend du besoin.
    Avec ce cas-là on obtient le même résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    WITH automobile AS
    (
    select 'AutoA' as nom, 'NOIR' as couleur from dual union all
    select 'AutoB'       , 'NOIR'            from dual union all
    select 'AutoB'       , 'BLEU'            from dual union all
    select 'AutoC'       , 'BLEU'            from dual union all
    select 'AutoD'       , 'VERTE'           from dual
    )
      SELECT nom, couleur,
             row_number() over(PARTITION BY nom ORDER BY case couleur when 'NOIR' then 1 else 2 end ASC) rn,
             dense_rank() over(PARTITION BY nom ORDER BY case couleur when 'NOIR' then 1 else 2 end ASC) dr
        FROM automobile
       WHERE couleur IN ('NOIR', 'BLEU')
    ORDER BY nom ASC;
     
    NOM	COULEUR	RN	DR
    AutoA	NOIR	1	1
    AutoB	NOIR	1	1
    AutoB	BLEU	2	2
    AutoC	BLEU	1	1
    Mais pas avec ce cas là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    WITH automobile AS
    (
    select 'AutoA' as nom, 'NOIR' as couleur from dual union all
    select 'AutoB'       , 'NOIR'            from dual union all
    select 'AutoB'       , 'BLEU'            from dual union all
    select 'AutoC'       , 'BLEU'            from dual union all
    select 'AutoD'       , 'VERTE'           from dual union all
    select 'AutoE'       , 'NOIR'            from dual union all
    select 'AutoE'       , 'NOIR'            from dual union all
    select 'AutoE'       , 'NOIR'            from dual
    )
      SELECT nom, couleur,
             row_number() over(PARTITION BY nom ORDER BY case couleur when 'NOIR' then 1 else 2 end ASC) rn,
             dense_rank() over(PARTITION BY nom ORDER BY case couleur when 'NOIR' then 1 else 2 end ASC) dr
        FROM automobile
       WHERE couleur IN ('NOIR', 'BLEU')
    ORDER BY nom ASC;
     
    NOM	COULEUR	RN	DR
    AutoA	NOIR	1	1
    AutoB	NOIR	1	1
    AutoB	BLEU	2	2
    AutoC	BLEU	1	1
    AutoE	NOIR	1	1
    AutoE	NOIR	2	1
    AutoE	NOIR	3	1

  5. #5
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Oui justement : c'est parce que la requête de ton premier post laisse penser qu'on veut récupérer toutes les voitures noires (et donc qu'il risque d'y en avoir plusieurs).
    Et ça semble bien correspondre à la question posée... sauf que row_number ne prendra que la première.

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Oui correct

Discussions similaires

  1. [SQL] Probleme sur requete
    Par Invité(e) dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/11/2007, 17h30
  2. probleme sur requete d'analyse croisée
    Par sebastien97 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 21/06/2007, 15h22
  3. Probleme sur requete de mise à jour
    Par kikilevrai dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 08/01/2007, 11h54
  4. probleme sur requete
    Par pimpmyride dans le forum Access
    Réponses: 13
    Dernier message: 03/05/2006, 09h44
  5. [MySQL] Probleme sur requetes imbriquées
    Par joxbl dans le forum Langage SQL
    Réponses: 41
    Dernier message: 12/04/2006, 17h20

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