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 :

Numéro de colonne dans un where


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 Numéro de colonne dans un where
    Salut !

    j'ai la requête suivante :
    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
    select 
        tb_sr.code_sr,
        tb_sr.nom_sr,
        case
          when not(tb_sr_service.date_bilan is null) then tb_sr_service.date_bilan
          else tb_energie.date_mois
        end date_bilan,
        sum( tb_energie.montant_facture ) facture,
        sum( tb_sr_service.volume_releve ) volume,
        sum( tb_frais_exploitations.frais_total ) frais_exp,
     
        -- ratio
        (coalesce(sum( tb_energie.montant_facture ), 0) +
         coalesce(sum( tb_frais_exploitations.frais_total  ), 0) ) /
        nullif(sum( tb_sr_service.volume_releve ), 0) ratio
    from tb_sr
       left outer join tb_sr_service on (tb_sr.code_sr = tb_sr_service.code_sr)
       left outer join tb_energie on (tb_sr_service.code_sr = tb_energie.code_sr)
        and (tb_sr_service.date_bilan = tb_energie.date_mois)
       left outer join tb_sr_arret on (tb_energie.code_sr = tb_sr_arret.code_sr)
        and (tb_energie.date_mois = tb_sr_arret.date_bilan)
       and (tb_sr_arret.code_sr = tb_sr.code_sr)
       left outer join tb_frais_exploitations on (tb_sr_service.code_sr = tb_frais_exploitations.code_sr)
        and (tb_sr_service.date_bilan = tb_frais_exploitations.date_mois)
     
        where (3 between cast(:d_debut as date) and cast(:d_fin as date ))
     
    group by 1, 2, 3
     
    order by 1, 2, 3
    je voudrais dans la clause where tester sur la colonne 3 qui doit être de type date si on tient compte du résultat du case dans la clause Select.
    Lors de l'exécution, IB me donne bien un compo de type date ce qui est logique mais il me retourne par contre un message d'erreur de conversion de type. J'ai pensé à caster les deux variables d'entrée mais j'ai toujours cette même erreur.

    Peut-être que le champs dans la clause where ne supporte pas le numéro de colonne seule ?

    Merci de me lire.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut
    Citation Envoyé par Just-Soft Voir le message
    Peut-être que le champs dans la clause where ne supporte pas le numéro de colonne seule ?
    Oui c'est ça, on ne peut pas utiliser un n° de colonne dans la clause WHERE. GROUP BY et ORDER BY uniquement.

    As-tu essayé de poser ta condition en utilisant l'alias de ta colonne (soit date_bilan).

    @+ Claudius.

  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
    même avec l'alias ça passe pas, il n'est pas reconnu !
    une autre pistes peut-être ?
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    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 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        case
          when NOT(tb_sr_service.date_bilan IS NULL) then tb_sr_service.date_bilan
          else tb_energie.date_mois
        end date_bilan,
    ne pourrait il pas être remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COALESCE(tb_sr_service.date_bilan,tb_energie.date_mois) as date_bilan
    du coup pour le Where
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     WHERE COALESCE(tb_sr_service.date_bilan,tb_energie.date_mois) BETWEEN cast(:d_debut AS date) AND cast(:d_fin AS date )
    Sinon aprés le GROUP BY essayes un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HAVING date_bilan BETWEEN cast(:d_debut AS date) AND cast(:d_fin AS date )
    en otant la clause Where bien sur ;-)

    PS . les paramètres d_debut et d_fin sont des Strings ?
    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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/11/2008, 15h53
  2. Réponses: 1
    Dernier message: 02/12/2007, 12h24
  3. Colonnes dans le WHERE donc dans le SELECT ?
    Par nicoreims dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/08/2006, 11h54
  4. Récupérer le numéro de colonne dans un JTextPane
    Par The Rock dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 28/12/2005, 17h30
  5. Réponses: 6
    Dernier message: 15/12/2005, 15h29

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