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 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    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 ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    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
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    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 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bravo , Barbibulle , l'alias de la table fait toute la différence
    pourquoi l'ai-je oublié , mystère
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

+ 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