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 :

SELECT CASE WHEN BETWEEN ?


Sujet :

SQL Oracle

  1. #1
    Membre régulier Avatar de H.ile
    Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Janvier 2008
    Messages : 122
    Points : 76
    Points
    76
    Par défaut SELECT CASE WHEN BETWEEN ?
    Aloha

    Voilà, je souhaite ajouter un indicateur en fonction de l'intervalle de valeur d'un autre attribut. Bon c'est pas très français, donc si tout marchait bien ça devrait ressembler à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT GID,
           NOM,
           NUMERO,
           TO_NUMBER (QUALITE) AS INDIC,
           CASE TO_NUMBER(QUALITE) WHEN BETWEEN 13 AND 16 THEN 'acceptable' 
           ELSE 'test'
           END AS IMPACT
      FROM A_NCPARC;
    Et bah non, "ORA-00936: expression absente".
    Et pourtant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     SELECT GID, NUMERO, QUALITE
     FROM A_NCPARC
     WHERE TO_NUMBER(QUALITE) BETWEEN 13 AND 16
    fonctionne

    Je sèche. Dans la plupart des sujets que j'ai pu lire, pas de problème pour combiner les deux, normalement... Je suis en Oracle 10.2 au fait.

    D'avance, merci,

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Essayez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CASE
      WHEN TO_NUMBER(QUALITE) BETWEEN 13 AND 16
      THEN 'acceptable'
      ELSE 'test'
    END AS IMPACT

  3. #3
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Vous voulez dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    CASE 
      When TO_NUMBER(QUALITE) BETWEEN 13 AND 16 THEN 'acceptable' 
    ...

  4. #4
    Membre régulier Avatar de H.ile
    Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Janvier 2008
    Messages : 122
    Points : 76
    Points
    76
    Par défaut
    Je ne comprends pas, mais ça marche.
    Ailleurs j'avais utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CASE MJ2_PARCEL.CCOCOM
              WHEN '055' THEN 'B****y'
              WHEN '058' THEN 'B***s'
              WHEN '172' THEN 'C***uil'
              WHEN '454' THEN 'R**s'
              WHEN '474' THEN 'S***s'
              WHEN '573' THEN 'T***x'
           END
              AS "Commune du logement",
    Qui fonctionnait.
    Quelle est donc la règle ?
    Sur ce, merci !

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CASE MJ2_PARCEL.CCOCOM
              WHEN '055' THEN 'B****y'
              WHEN '058' THEN 'B***s'
    Est équivalent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CASE 
              WHEN MJ2_PARCEL.CCOCOM = '055' THEN 'B****y'
              WHEN MJ2_PARCEL.CCOCOM = '058' THEN 'B***s'
    C'est une autre écriture, plus proche du decode.

    Donc quand vous écrivez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CASE TO_NUMBER(QUALITE) WHEN BETWEEN 13 AND 16 THEN 'acceptable'
    Ça devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CASE WHEN TO_NUMBER(QUALITE) = BETWEEN 13 AND 16 THEN 'acceptable'
    Ce qui provoque l'erreur !

    Les deux syntaxes (simple case, searched case) sont documentées chez Oracle :
    http://download.oracle.com/docs/cd/E...htm#DWHSG02012

Discussions similaires

  1. Syntaxe SELECT CASE WHEN avec Microsoft.ACE.OLEDB.12.0
    Par kluh dans le forum Langage SQL
    Réponses: 5
    Dernier message: 28/12/2010, 09h59
  2. pb SELECT CASE WHEN
    Par bb5477 dans le forum SQL
    Réponses: 2
    Dernier message: 18/12/2007, 17h16
  3. Access et SELECT CASE WHEN dans requetes
    Par Orion01 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 06/12/2007, 11h24
  4. Réponses: 7
    Dernier message: 29/05/2007, 10h21
  5. Equivalent "Select Case when then else end" sur Paradoxe
    Par Seuh.m dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/06/2006, 08h23

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