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 Firebird Discussion :

un petit soucis de CASE


Sujet :

SQL Firebird

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 213
    Points : 41 476
    Points
    41 476
    Billets dans le blog
    63
    Par défaut un petit soucis de CASE
    Bonjour ,

    J'ai une Table Article (simplifiée)
    ARTICLE
    CODE_ARTICLE INTEGER,
    LIBELLE VARCHAR(30),
    GRILLE SMALLINT // de 0 à 99 les codes 0,1,90..99 sont réservés
    ..
    et une table GRILLES (de pointure ou de taille)
    GRILLES
    ID_GRILLE SMALLINT,
    CODE_GRILLE VARCHAR(5),
    INTITULE_GRILLE VARCHAR(30)
    ...
    je veux empêcher l'édition/suppression des codes réservé (merci triggers)
    mais surtout , lors de l'affichage de la liste des grilles je veux indiquer si c'est possible ou non

    pour cela je fait cette requête

    Code SQL : 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 U AS (SELECT GRILLE,COUNT(*) as N FROM ARTICLE
                        GROUP BY 1)
     
    SELECT ID_GRILLE,CODE_GRILLE,LIBELLE_GRILLE,
    CASE ID_GRILLE 
      WHEN 0 THEN 1
      WHEN 1 THEN 1
      WHEN 91 THEN 1
      WHEN 92 THEN 1
      WHEN 93 THEN 1
      WHEN 94 THEN 1
      WHEN 95 THEN 1
      WHEN 96 THEN 1
      WHEN 97 THEN 1
      WHEN 98 THEN 1
      WHEN 99 THEN 1
      ELSE COALESCE(U.N,0) 
    END AS EDITABLE
    FROM GRILLES LEFT JOIN U ON ID_GRILLE=U.GRILLE
    ORDER BY 1

    J'aurais voulu simplifier la partie CASE WHEN
    mais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CASE
    WHEN (ID_GRILLE<2) THEN 1
    WHEN (ID_GRILLE<91) THEN 1
    ELSE COALESCE(U.N,0)
    END
    ne fonctionne pas (test avec fb 2.1 donne "token unknown <")

    Une solution ?

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Points : 1 414
    Points
    1 414
    Par défaut
    Bonjour sergio


    Je viens d'essayer avec firebird 2.5 et ce type d’écriture fonctionne (mais sans l'appel a la CTE)

    Est ce que cela ne viendrait pas de là, même si le message d'erreur ne le laisse pas supposé

    Désolé de ne pouvoir faire plus

  3. #3
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Hello Sergio,

    Peux tu essayer :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    WITH U AS (SELECT GRILLE, COUNT(*) as N FROM ARTICLE
                        GROUP BY 1)
     
    SELECT G.ID_GRILLE, G.CODE_GRILLE, G.LIBELLE_GRILLE,
    CASE
      WHEN (G.ID_GRILLE < 2) THEN 1
      WHEN (G.ID_GRILLE < 91) THEN 1
      ELSE COALESCE(U.N,0)
    END AS EDITABLE
    FROM GRILLES G LEFT JOIN U ON G.ID_GRILLE=U.GRILLE
    ORDER BY 1

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 213
    Points : 41 476
    Points
    41 476
    Billets dans le blog
    63
    Par défaut
    Bravo , Barbibulle , l'alias de la table fait toute la différence
    pourquoi l'ai-je oublié , mystère

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

Discussions similaires

  1. Petit soucis de case à cocher
    Par Bullit84 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/05/2010, 11h00
  2. petit soucy de fenetre cmd
    Par FeetloveR666 dans le forum Windows
    Réponses: 5
    Dernier message: 03/07/2004, 14h24
  3. petit soucis lors d'un LOAD DATA INFILE
    Par Jovial dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 04/06/2004, 11h58
  4. Réponses: 6
    Dernier message: 21/01/2004, 13h25
  5. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52

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