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 :

Intégrer un champ calculé dans une requête


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 954
    Par défaut Intégrer un champ calculé dans une requête
    Bonjour à tous,

    Je voudrais intégrer un champs calculé dans cette requette
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with c as (select dat,fac,fou,sec,pro,mar,cho,far,coi,qta,null as bon,null as clt,null as qtv from ach a 
              where (num=1)    Union all
           select dat,null as fac,null as fou,sec,pro,mar,cho,far,coi,null as qta,bon,clt,qte as qtv from ven 
            where (num=1))
            select * from c where (qta is not null)or(qtv is not null)
    qui calcul le cumul du solde de qta-qtv.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 603
    Billets dans le blog
    65
    Par défaut
    Vous vous embêtez avec l'utilisation de NULL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with c as (select dat,fac,fou,sec,pro,mar,cho,far,coi,qta,null as bon, as clt,0 as qtv from ach a 
              where (num=1)    Union all
           select dat,null as fac,null as fou,sec,pro,mar,cho,far,coi,0 as qta,bon,clt,qte as qtv from ven 
            where (num=1))
            select qta-qtv ecart from c

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 611
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Je suppose qu'il faut effectuer ce calcul pour un certain critère, et donc rapprocher certaines lignes de ventes de certaines lignes d'achat ?
    Sinon on va cumuler des navets et des carottes...
    Auquel cas une simple UNION ne convient pas, il faut effectuer une jointure.

    Besoin à préciser

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 954
    Par défaut
    Bonjour,

    Je me suis peut être pas bien expliqué, moi je veux récupérer toutes les lignes avec une colonne en plus "solstk" qui contient le cumul de "solstk=solstk+qta-qtv"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with c as (select dat,fac,fou,sec,pro,mar,cho,far,coi,qta,null as bon,null as clt,null as qtv from ach a 
              where (num=1)    Union all
           select dat,null as fac,null as fou,sec,pro,mar,cho,far,coi,null as qta,bon,clt,qte as qtv from ven 
            where (num=1))
            select */*,solstk*/ from c where (qta is not null)or(qtv is not null)

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 603
    Billets dans le blog
    65
    Par défaut
    Rien ne vous empêche de modifier le select de la CTE de ma proposition.

    Je vous rappelle que mettre NULL au lieu de 0 va vous poser des problèmes
    Comme d'habitude, vous n'êtes jamais assez précis dans vos questions, une description des tables impliquées, une liste des colonnes souhaitées en sorties aurait été un minimum souhaitable
    J'imagine également qu'il faudrait un GROUP BY quelque part

    "solstk" qui contient le cumul de "solstk=solstk+qta-qtv"
    et cette colonne solstk qui vient d'on ne sait où elle vient de quelle table ? Quelle relation ? Je présume que c'est num parce que j'ai une bonne boule de cristal.

    Je me suis peut être pas bien expliqué,
    pas peut-être, surement, d'où la nécessité de description des tables impliquées. En fait, je doute même du bien fondé de votre CTE actuelle

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 954
    Par défaut
    Bonjour,

    et cette colonne solstk qui vient d'on ne sait où elle vient de quelle table ? Quelle relation ? Je présume que c'est num parce que j'ai une bonne boule de cristal.
    c'est une colonne calculé comme je l'ai expliqué solstk=(solde précédent)+qta-qtv
    voila un exple du résultat souhaité
    Nom : Sans titre.png
Affichages : 195
Taille : 12,2 Ko

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 603
    Billets dans le blog
    65
    Par défaut
    Bonjour, quand j'écris que vous n'êtes pas clair dans vos demandes, je réitère, car non seulement vous ne nous avez toujours pas fourni la structure des tables, mais en plus la version de Firebird risque d'être déterminante.

    Quelques réflexions tout d'abord
    - la sortie semble être une sortie imprimée, en ce cas la plupart des générateurs d'état (non renseigné) permettent de cumuler au fur et à mesure de l'édition des bandes détails.
    c'est une colonne calculée, comme je l'ai expliqué solstk=(solde précédent)+qta-qtv
    - ce n'est pas ainsi que vous l'avez exprimé, relisez-vous, pour moi, il pouvait s'agir d'une colonne provenant d'une table différente permettant de connaitre le stock disponible rapidement, j'imagine difficilement une gestion de stock ou pour obtenir le disponible, je serais obligé de balayer l'ensemble des mouvements !
    - à la lecture de la sortie souhaitée le terme colonne calculée est mal choisi

    Maintenant quelques pistes de solutions SQL
    - Si vous avez Firebird 3 alors, vous pourrez utiliser les fonctions de fenêtrage dites aussi fonctions analytiques
    - une version Firebird 2.1 + une CTE Recursive serait peut-être envisageable
    - dans tous les cas, si vous êtes fâché avec ce genre de choses, une procédure est toujours envisageable

    Je redemande donc, la description des tables impliquées avant toutes choses (c'est quand même pas difficile à faire !) , la version de Firebird et l'objectif de la demande, sortie imprimée ou affichée à l'écran, cela fera une grosse différence ! un champ calculé (notez bien le terme champ Delphi et non colonne Firebird) en ce qui concerne ce deuxième point pourrait suffire

Discussions similaires

  1. [AC-2007] Champ calculé dans une requête
    Par Chris 81 dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 02/09/2011, 14h40
  2. Ré utiliser des champs calculés dans une requête
    Par boby62423 dans le forum Développement
    Réponses: 6
    Dernier message: 11/03/2011, 16h43
  3. Champs calculés dans une requête
    Par fmu74 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 03/12/2008, 15h29
  4. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29
  5. Champ calculé dans une requête
    Par HUÏEZ Fabienne dans le forum Access
    Réponses: 3
    Dernier message: 08/12/2005, 12h31

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