Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/06/2011, 09h46   #1
Modérateur
 
Avatar de SergioMaster
 
Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 3 612
Détails du profil
Informations personnelles :
Nom : Serge Girard
Âge : 55
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 3 612
Points : 4 512
Points : 4 512
Par défaut un petit soucis de CASE

Bonjour ,

J'ai une Table Article (simplifiée)
Citation:
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)
Citation:
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 :
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 :
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 ?
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 11h20   #2
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
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
dehorter olivier est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 12h03   #3
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Hello Sergio,

Peux tu essayer :

Code SQL :
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
Barbibulle est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 13h58   #4
Modérateur
 
Avatar de SergioMaster
 
Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 3 612
Détails du profil
Informations personnelles :
Nom : Serge Girard
Âge : 55
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 3 612
Points : 4 512
Points : 4 512
Bravo , Barbibulle , l'alias de la table fait toute la différence
pourquoi l'ai-je oublié , mystère
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h26.


 
 
 
 
Partenaires

Hébergement Web