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 :

Cellules intelligentes dans une Requête


Sujet :

SQL Firebird

  1. #1
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut Cellules intelligentes dans une Requête
    Salut

    comme à l’accoutume, je commence par donner le code :
    Code : 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
    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)
    Mon blog sur WordPress

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour ,
    tu peux très bien utiliser une Clase CASE WHEN END dans un SELECT donc : OUI

    Rappel de possiblité du case
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;
    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

  3. #3
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Merci Serge

    j'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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)
    Mon blog sur WordPress

  4. #4
    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
    Salut

    Essaye plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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)
    Merci d'ajouter un sur les tags qui vous ont aidé

  5. #5
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    merci olivier ça marche
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  6. #6
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Re,

    maintenant j'ai un petit soucis avec plus d'un paramètre.
    voici ce que j'ai fais :
    Code : 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
    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)
    Mon blog sur WordPress

  7. #7
    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
    Il faut un Case pour chaque cas (et donc une colonne pour chaque cas).
    Merci d'ajouter un sur les tags qui vous ont aidé

  8. #8
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Le résultat est à présent plutôt encourageant, reste une petite question de mise en forme.

    Le dernier code ressemble à ceci :
    Code : 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
    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)
    Mon blog sur WordPress

  9. #9
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    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)
    Mon blog sur WordPress

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 26/10/2010, 16h05
  2. Réponses: 3
    Dernier message: 20/10/2010, 12h27
  3. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  4. [SQL] Renommer un champ dans une requête
    Par martonpylon12 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 15/11/2003, 01h59
  5. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 13h51

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