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 14/07/2011, 21h32   #1
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 1 977
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 1 977
Points : 2 126
Points : 2 126
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
Par défaut Cellules intelligentes dans une Requête

Salut

comme à l’accoutume, je commence par donner le code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT 
    tb_step.nom_step,
    tb_process.date_bilan,
    tb_process.dbo5_sortie,
    tb_process.dco_sortie,
    tb_process.mes_sortie,
    tb_process.nh4_sortie
FROM tb_process
   INNER JOIN tb_step ON (tb_process.code_step = tb_step.code_step)
   INNER JOIN tb_norme_rejet ON (tb_step.code_step = tb_norme_rejet.code_step)
WHERE 
   (
      (tb_process.dbo5_sortie >= tb_norme_rejet.norme_dbo_max)
   OR 
      (tb_process.dco_sortie >= tb_norme_rejet.norme_dco_max)
   OR 
      (tb_process.mes_sortie >= tb_norme_rejet.norme_mes_max)
   OR 
      (tb_process.nh4_sortie >= tb_norme_rejet.norme_nh4)
   )
je voudrais à l'exécution avoir dans les cellules dépassants la norme la valeur elle-même, les autres cellules avec un caractère comme '/' est-ce possible ?

merci par avance
__________________
Bon courage ou Bonne Chance (selon le contexte)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 09h40   #2
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
Bonjour ,
tu peux très bien utiliser une Clase CASE WHEN END dans un SELECT donc : OUI

Rappel de possiblité du case
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
SELECT
   o.ID,
   o.Description,
   CASE o.STATUS
     WHEN 1 THEN 'confirmed'
     WHEN 2 THEN 'in production'
     WHEN 3 THEN 'ready'
     WHEN 4 THEN 'shipped'
     ELSE 'unknown status ''' || o.STATUS || ''''
   END
FROM Orders o;
Code :
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
   o.ID,
   o.Description,
   CASE
     WHEN (o.STATUS IS NULL) THEN 'new'
     WHEN (o.STATUS = 1) THEN 'confirmed'
     WHEN (o.STATUS = 3) THEN 'in production'
     WHEN (o.STATUS = 4) THEN 'ready'
     WHEN (o.STATUS = 5) THEN 'shipped'
     ELSE 'unknown status ''' || o.STATUS || ''''
   END
FROM Orders o;
__________________
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/07/2011, 16h13   #3
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 1 977
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 1 977
Points : 2 126
Points : 2 126
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
Merci Serge

j'ai essayé ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT 
    tb_step.nom_step,
    tb_process.date_bilan,
    tb_process.dbo5_sortie,
    tb_process.dco_sortie,
    tb_process.mes_sortie,
    tb_process.nh4_sortie,
    case (tb_process.dbo5_sortie >= tb_norme_rejet.norme_dbo_max)
        when 0 then '/'
        when 1 tb_process.dbo5_sortie
    end
 
    FROM tb_process
        INNER JOIN tb_step ON (tb_process.code_step = tb_step.code_step)
        INNER JOIN tb_norme_rejet ON (tb_step.code_step = tb_norme_rejet.code_step)
mais le case parait pas en mesure d'évaluer une expression car j'ai une erreur de non reconnaissance de l'opérateur '>'
__________________
Bon courage ou Bonne Chance (selon le contexte)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2011, 16h31   #4
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
Salut

Essaye plutôt :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT 
    tb_step.nom_step,
    tb_process.date_bilan,
    tb_process.dbo5_sortie,
    tb_process.dco_sortie,
    tb_process.mes_sortie,
    tb_process.nh4_sortie,
    case 
        when (tb_process.dbo5_sortie >= tb_norme_rejet.norme_dbo_max) then '/'
        ELSE 1 tb_process.dbo5_sortie
    end
 
    FROM tb_process
        INNER JOIN tb_step ON (tb_process.code_step = tb_step.code_step)
        INNER JOIN tb_norme_rejet ON (tb_step.code_step = tb_norme_rejet.code_step)
dehorter olivier est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2011, 16h49   #5
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 1 977
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 1 977
Points : 2 126
Points : 2 126
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
merci olivier ça marche
__________________
Bon courage ou Bonne Chance (selon le contexte)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2011, 16h58   #6
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 1 977
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 1 977
Points : 2 126
Points : 2 126
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
Re,

maintenant j'ai un petit soucis avec plus d'un paramètre.
voici ce que j'ai fais :
Code :
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
27
28
29
30
31
32
33
SELECT 
    tb_step.nom_step,
    tb_process.date_bilan,
 
    case
        when (tb_process.dbo5_sortie <= tb_norme_rejet.norme_dbo_max) then '/'
        else tb_process.dbo5_sortie
 
        when (tb_process.dco_sortie <= tb_norme_rejet.norme_dco_max) then '/'
        else tb_process.dco_sortie
 
        when (tb_process.mes_sortie <= tb_norme_rejet.norme_mes_max) then '/'
        else tb_process.mes_sortie
 
        when (tb_process.nh4_sortie <= tb_norme_rejet.norme_nh4_max) then '/'
        else tb_process.nh4_sortie
    end
 
 
    FROM tb_process
        INNER JOIN tb_step ON (tb_process.code_step = tb_step.code_step)
        INNER JOIN tb_norme_rejet ON (tb_step.code_step = tb_norme_rejet.code_step)
 
    WHERE
    (
      (tb_process.dbo5_sortie >= tb_norme_rejet.norme_dbo_max)
    OR
      (tb_process.dco_sortie >= tb_norme_rejet.norme_dco_max)
    OR
      (tb_process.mes_sortie >= tb_norme_rejet.norme_mes_max)
    OR
      (tb_process.nh4_sortie >= tb_norme_rejet.norme_nh4)
    )
à ce stade j'ai une erreur sur le second when ... il me semble que c'est une erreur de syntaxe mais que j'arrive pas à trouver tout seul

autre chose, dans le résultat, le champs a pris le nom "CASE" comment lui donner un nom signifiant ?

merci d'avance.
__________________
Bon courage ou Bonne Chance (selon le contexte)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2011, 17h05   #7
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
Il faut un Case pour chaque cas (et donc une colonne pour chaque cas).
dehorter olivier est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2011, 17h43   #8
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 1 977
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 1 977
Points : 2 126
Points : 2 126
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
Le résultat est à présent plutôt encourageant, reste une petite question de mise en forme.

Le dernier code ressemble à ceci :
Code :
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
SELECT 
    tb_step.nom_step,
    tb_process.date_bilan,
    /* colonne DBO5 */
    case
      when (tb_process.dbo5_sortie <= tb_norme_rejet.norme_dbo_max) then '/'
      else cast(tb_process.dbo5_sortie AS integer)
    end DBO5,
 
    /* colonne DCO */
    case
      when (tb_process.dco_sortie <= tb_norme_rejet.norme_dco_max) then '/'
      else cast(tb_process.dco_sortie AS integer)
    end DCO,
 
    /* colonne MES */
    case
      when (tb_process.mes_sortie <= tb_norme_rejet.norme_mes_max) then '/'
      else cast(tb_process.mes_sortie AS integer)
    end MES,
 
    /* colonne NH4 */
    case
      when (tb_process.nh4_sortie <= tb_norme_rejet.norme_nh4) then '/'
      else cast(tb_process.nh4_sortie AS integer)
    end NH4
 
    FROM tb_process
        INNER JOIN tb_step ON (tb_process.code_step = tb_step.code_step)
        INNER JOIN tb_norme_rejet ON (tb_step.code_step = tb_norme_rejet.code_step)
 
    WHERE
    (
      (tb_process.dbo5_sortie >= tb_norme_rejet.norme_dbo_max)
    OR
      (tb_process.dco_sortie >= tb_norme_rejet.norme_dco_max)
    OR
      (tb_process.mes_sortie >= tb_norme_rejet.norme_mes_max)
    OR
      (tb_process.nh4_sortie >= tb_norme_rejet.norme_nh4)
    )
Les colonnes ajoutées ont une largeur bien grande par rapport au contenu, j'ai tout simplement donné un nom à chaque colonne et forcé le résultat par un cast mais j'ai toujours ces colonnes assez larges ...

y'a t-il une façon pour y remédier à ça ?!
__________________
Bon courage ou Bonne Chance (selon le contexte)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 09h30   #9
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 1 977
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 1 977
Points : 2 126
Points : 2 126
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
Citation:
Envoyé par Just-Soft Voir le message

Les colonnes ajoutées ont une largeur bien grande par rapport au contenu, j'ai tout simplement donné un nom à chaque colonne et forcé le résultat par un cast mais j'ai toujours ces colonnes assez larges ...

y'a t-il une façon pour y remédier à ça ?!
tout est rentré dans l'ordre sans que je fasse quoi que se soit ! je crois que s'était un problème de résolution ni plus ni moins ...

merci à tous.
__________________
Bon courage ou Bonne Chance (selon le contexte)
Just-Soft 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 22h00.


 
 
 
 
Partenaires

Hébergement Web