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

 Delphi Discussion :

Un enregistrement à modifier


Sujet :

Delphi

  1. #1
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut Un enregistrement à modifier
    bonsoir
    1- voila mon problème j'ai des enregistrements qui n'affichent pas le Zero (0) ?
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT
     T.CDP_P, T.Produits,
      MAX((SELECT sum(COALESCE(E.Qte_E,0)) FROM Tentrees E WHERE E.CD_PE = T.CDP_P)) AS QTE,
      MAX((SELECT sum(COALESCE(S.Qte_s,0)) FROM Tsorties S WHERE S.CD_PS = T.CDP_P)) AS QTS,
     Sum(Qte-Qts) AS Stock
    FROM Tproduits T
    GROUP BY T.CDP_P,T.Produits
    HAVING MAX((SELECT sum(COALESCE(E.Qte_e,0)) FROM TEntrees E 
    WHERE E.CD_PE = T.CDP_P)) >0 OR MAX((SELECT sum(COALESCE(S.Qte_s,0)) 
    FROM Tsorties S WHERE S.CD_PS = T.CDP_P)) >0
    2- est- il possible de virer les enregistrements <= 0 ? (je veux a dire qu'ils ne s'affichent pas dans le dbgrid)
    merci pour toutes aide

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 048
    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 048
    Points : 40 968
    Points
    40 968
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Je n'ai pas envie de rechercher dans les discussions de quel SGBD il s'agit alors il serait peut-être bon de commencer par l'indiquer non ?

    Ensuite il faudrait peut-être nous indiquer quelle colonne est à tester. "j'ai des enregistrements qui n'affichent pas le Zero" n'indique pas le test à faire.

    Concernant le SQL :
    - je ne pense pas qu'un agrégat puisse de faire dans une clause WHERE
    - je vois des noms d'alias E.CD_PE = T.CDP_P qui ne sont pas définis
    en gros, il est totalement faux.

    Il serait mieux de nous fournir les structures des tables impliquées. Et, comme il s'agit de SQL, poser la question (avec ces informations) dans le forum adéquat (SQL ou <type de SGBD>/SQL)
    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
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 700
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 700
    Points : 13 142
    Points
    13 142
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    en gros, il est totalement faux.
    Non c'est "juste", WHERE et E. s'appliquent à la requête imbriquée (la même que sur SELECT) mais il aurait été plus simple de l'écrire HAVING QTE > 0 OR QTS > 0. Après pourquoi un MAX sur un SUM (valeur unique), mystère

    Ce qui est plus surprenant est cette somme sur des alias SUM(Qte-Qts). Autant à ma connaissance les alias sont supportés dans une clause HAVING (la requête a été exécutée et on filtre le résultat) autant ils ne le sont pas dans un SELECT (la requête n'est pas encore exécutée et ces champs "alias" sont inconnus). Ca donne l'impression que Qte et Qts existent dans la table TProduits, d'où peut-être une valeur null.


    Après c'est sûr que cette requête n'est pas exceptionnelle et devrait être écrite différemment.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 048
    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 048
    Points : 40 968
    Points
    40 968
    Billets dans le blog
    62
    Par défaut
    @AndnotOr Désolé, mais je persiste.

    Dans le "corps principal" de la requête
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT
     T.CDP_P, T.Produits,
      MAX((SELECT sum(COALESCE(E.Qte_E,0)) FROM Tentrees E WHERE E.CD_PE = T.CDP_P)) AS QTE,
      MAX((SELECT sum(COALESCE(S.Qte_s,0)) FROM Tsorties S WHERE S.CD_PS = T.CDP_P)) AS QTS,
     Sum(Qte-Qts) AS Stock
    FROM Tproduits T
    il y a des appels aux alias E.QTE_E, S.QTE_S or il n'y a aucune jointures !
    Dans la même veine Sum(Qte-Qts) AS Stock ne peut pas fonctionner QTE et QTS étant des alias de colonnes
    MAX est, AMHA totalement inutile

    Je n'ai pas envie de rechercher dans les discussions de quel SGBD
    Finalement j'ai fini par craquer et cela doit faire suite à cette discussion
    donc : ABSOLUTE DATABASE
    @MIWAN rappeler cette discussion au début aurait été quand même plus simple non ?

    ma boule de Noël (je ne vais pas utiliser ma boule de cristal, en panne) me dit que le SQL recherché est, en supposant que le
    est- il possible de virer les enregistrements <= 0
    soit un synonyme de :
    "Avec un stock supérieur à zéro"

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT T.CDP_P, T.Produits,T.Seuil,
      SUM(COALESCE(E.Qte_e,0)) AS QTE,
      SUM(COALESCE(S.Qte_s,0)) AS QTS,
      SUM(COALESCE(E.Qte_e,0)-COALESCE(S.Qte_s,0)) AS Stock
    FROM TProduits T
    LEFT JOIN TEntrees E ON E.CD_PE = T.CDP_P
    LEFT JOIN Tsorties S ON S.CD_PS = T.CDP_P
    GROUP BY T.CDP_P, T.Produits,T.Seuil
    HAVING SUM(COALESCE(E.Qte_e,0)-COALESCE(S.Qte_s,0))>0
    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

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 700
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 700
    Points : 13 142
    Points
    13 142
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    il y a des appels aux alias E.QTE_E, S.QTE_S or il n'y a aucune jointures !
    Et ? Tout au plus aurait-il pu simplifier l'écriture mais ce n'est pas une erreur en soit.

    Citation Envoyé par MIWAN Voir le message
    j'ai des enregistrements qui n'affichent pas le Zero (0) ?
    Citation Envoyé par SergioMaster Voir le message
    en supposant que ce soit un synonyme de : "Avec un stock supérieur à zéro"
    MIWAN précisera sa pensée. Moi j'ai pris cela comme une valeur null.

    Citation Envoyé par SergioMaster Voir le message
    Dans la même veine Sum(Qte-Qts) AS Stock ne peut pas fonctionner QTE et QTS étant des alias de colonnes
    Si la requête s'exécute c'est que ces deux champs existent dans la table, indépendamment des alias qui portent le même nom.

  6. #6
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    @AndnotOr Désolé, mais je persiste.

    Finalement j'ai fini par craquer et cela doit faire suite à cette discussion
    donc : ABSOLUTE DATABASE
    @MIWAN rappeler cette discussion au début aurait été quand même plus simple non ?

    ma boule de Noël (je ne vais pas utiliser ma boule de cristal, en panne) me dit que le SQL recherché est, en supposant que le soit un synonyme de :
    "Avec un stock supérieur à zéro"
    justement c'est ABSOLUTE DATABASE (ici c'est la tasse thé qui a fait son effet synonyme de la boule de cristal)


    pour le code SQL fournis avec LEFT JOINT ça marche impeccable (c'est ce que je voulais) merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    SELECT T.CDP_P, T.Produits,T.Seuil,
      SUM(COALESCE(E.Qte_e,0)) AS QTE,
      SUM(COALESCE(S.Qte_s,0)) AS QTS,
      SUM(COALESCE(E.Qte_e,0)-COALESCE(S.Qte_s,0)) AS Stock
    FROM TProduits T
    LEFT JOIN TEntrees E ON E.CD_PE = T.CDP_P
    LEFT JOIN Tsorties S ON S.CD_PS = T.CDP_P
    GROUP BY T.CDP_P, T.Produits,T.Seuil
    HAVING SUM(COALESCE(E.Qte_e,0)-COALESCE(S.Qte_s,0))>0

  7. #7
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    SergioMaster, Andnotor : merci pour l’éclaircissement , j'ai bien compris quelques lois de SQL grâce a vous

  8. #8
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par MIWAN Voir le message
    SergioMaster, Andnotor : merci pour l’éclaircissement , j'ai bien compris quelques lois de SQL grâce a vous
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT T.CD_CT,T.CDP_P, T.Produits,T.Seuil,E.PrixA_E,E.PrixV_E,E.Units_E,
      SUM(COALESCE(E.Qte_e,0)) AS QTE,
      SUM(COALESCE(S.Qte_s,0)) AS QTS,
      SUM(COALESCE(E.Qte_e,0)-COALESCE(S.Qte_s,0)) AS Stock
    FROM TProduits T
    LEFT JOIN TEntrees E ON E.CD_PE = T.CDP_P
    LEFT JOIN Tsorties S ON S.CD_PS = T.CDP_P
    GROUP BY T.CD_CT,T.CDP_P, T.Produits,T.Seuil,E.PrixA_E,E.PrixV_E,E.Units_E

    je me rends compte que les calcules des entrées sont fausses ( la valeur entrée est multipliée par le nombre des sorties)
    exemple : j'ai une entrée d'un produit a la valeur 3 et il y'avait 3 sorties antérieur ; résultat affichée 9 .
    produits QTE QTS STOCK
    Café (3) 9 8 (3s) 1 // 3s = 3 sorties
    sucre (12) 24 4 (2s) 20 // 2s = 2 sorties
    NB :
    1-les calcules des sorties sont bien exactes , mais les entrées ?
    2- je ne vois pas comment insérer une image explicative, car la case envoyer est désactivée

    enfin ce n'est pas résolue encore
    excuse pour dérangement .

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 048
    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 048
    Points : 40 968
    Points
    40 968
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    C'est pour ce genre de raisons que je demande toujours, en cas de problème SQL,
    les structures des tables impliquées
    et dans ce cas un jeu d'essai conforme.

    Dans ce cas, le problème est "simple" vous ne nous avez pas indiqué de cardinalité (ou du moins pas de façon précise) entre la table produit et les tables TEntrees,TSorties le SQL proposé avec une boule de Noël est une proposition où, pour un produit il y a une ou zéro ligne entrée, une ou zéro ligne sorties. C'est vrai, ma boule de cristal aurait, peut-être, montrè autre chose si les noms de tables avait été différents (MVTS_ENTREES, MVTS_SORTIES), d'ailleurs cela aurait été moins compliqué s'il n'y avait eu qu'une seule table MVTS (avec un colonne indiquant s'il s'agissait de sortie ou d'entrée)

    En admettant que l'on ne peut pas faire de sorties d'un produit s'il n'y a pas au moins eu une entrée de ce produit (je connais hélas les utilisateurs donc il arrivera des exceptions à cette règle)
    intervertir une partie de la jointure pourrait suffire


    SELECT E.CD_PE,T.CD_CT, T.Produits,T.Seuil,E.PrixA_E,E.PrixV_E,E.Units_E,
    SUM(COALESCE(E.Qte_e,0)) AS QTE,
    SUM(COALESCE(S.Qte_s,0)) AS QTS,
    SUM(COALESCE(E.Qte_e,0)-COALESCE(S.Qte_s,0)) AS Stock
    FROM TEntrees E
    LEFT JOIN TProduits T ON E.CD_PE = T.CDP_P
    LEFT JOIN Tsorties S ON S.CD_PS = T.CDP_P
    GROUP BY E.CD_PE,T.CDP_P, T.Produits,T.Seuil,E.PrixA_E,E.PrixV_E,E.Units_E
    une autre solution, faire des sous-requêtes

    SELECT T.CDP_P,T.CD_CT, T.Produits,T.Seuil -- ,E.PrixA_E,E.PrixV_E,E.Units_E, // ceci reste un problème
    COALESCE(ES.QtE,0) AS QTE,
    COALESCE(S.QTS,0) QTS,
    COALESCE(ES.QTE,0)-COALESCE(S.QTS,0) AS Stock
    FROM TProduits T
    LEFT JOIN (SELECT CD_PE,SUM(QTE_E) QTE FROM TEntrees GROUP BY CD_PE) AS ES ON ES.CD_PE = T.CDP
    LEFT JOIN (SELECT CD_PS,SUM(QTE_S) QTS FROM Tsorties GROUP BY CD_PS) AS S ON S.CD_PS = T.CDP_P

    MAIS pour moi il y a de nombreuses erreurs de conception dans la BDD :
    - Quid s'il y a deux entrees d'un même produit avec un prix d'achat différent (ou prix de vente ou unité)

    Bref pour moi les structures des 3 tables impliquées, pas seulement la liste des colonnes, je demande aussi un commentaire expliquant chacune est absolument nécessaire.

    Tester aussi la possiblité de faire une requête sur un fichier .SQL comme Paradox le permettait. Cela permettrait, peut-être, un certaine souplesse
    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

  10. #10
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    table produits : N° auto, ID_Prd,cd_ct(code categorie) , CDP_P(code produit), Produits,units,seuil
    table entrees : N° auto, Fact_E, Date_E,CD_Fr(fournisseur), CD_Ct,Cd_PE,Qte_E, Units_E, PrixA_E,PrixV_E
    table Sorties : N° auto, Fact_S, Date_S,CD_CL(Clients), CD_Ct,Cd_PS,Qte_S, Units_S,PrixV_S

    - la jointure des tables ce fait par (CDP_P, CD_PE, CD_PS) des champs numérique
    - avoir la somme des entrées + la somme des sorties et enfin calculer le STOCK
    partie sorties j'affiche les produits existants en stock >0 = quand je veux faire des sorties je dois virer les produits qui ont la valeur <= 0 afin d'éviter les résultat moins (-1 ou ...) dans la consultation de stock
    j'espère cette fois que la boule de cristal est intacte

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 048
    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 048
    Points : 40 968
    Points
    40 968
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par MIWAN Voir le message
    j'espère cette fois que la boule de cristal est intacte
    Non, elle est encore brouillée par le manque de cardinalité.
    C'est à dire : un article peut-il avoir plusieurs mouvements d'entrées ? Auquel cas les colonnes (Qte_E, Units_E, PrixA_E,PrixV_E) devront être prises dans quelle ligne même si je suppose qu'il s'agit de la dernière en date ?


    et, bien sûr, un jeu d'essai facile à saisir (script SQL par exemple) serait nécessaire
    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

  12. #12
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    bonjour
    j'ai saisie ce code et ça marche bien
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT T.CDP_P,T.CD_CT, T.Produits,T.Seuil,Units_E,PrixA_E,PrixV_E,
    COALESCE(ES.QtE,0) AS QTE,
    COALESCE(S.QTS,0) QTS,
    COALESCE(ES.QTE,0)-COALESCE(S.QTS,0) AS Stock
    FROM TProduits T
    LEFT JOIN (SELECT CD_PE,SUM(QTE_E) QTE FROM TEntrees GROUP BY CD_PE) AS ES ON ES.CD_PE = T.CDP_P
    LEFT JOIN (SELECT CD_PS,SUM(QTE_S) QTS FROM Tsorties GROUP BY CD_PS) AS S ON S.CD_PS = T.CDP_P
    WHERE COALESCE(ES.QTE,0)-COALESCE(S.QTS,0)>0
    mais je n'ai pas compris : comment il a sommé sans la function SUM ?
    les entrées ne m’intéressent pas du au changement des prix

  13. #13
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 423
    Points : 5 825
    Points
    5 825
    Par défaut
    salut

    regarde les jointures. La sommation est faite à ce niveau et reporté à la requête principal par l'alias et le nom
    COALESCE(S.QTS,0) QTS,
    ...
    LEFT JOIN (SELECT CD_PS, SUM(QTE_S) QTS FROM Tsorties GROUP BY CD_PS) AS S
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  14. #14
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 048
    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 048
    Points : 40 968
    Points
    40 968
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par MIWAN Voir le message
    j'ai saisie ce code et ça marche bien
    Alors je me demande comment il est possible que le SQL fonctionne correctement car les colonnes Units_E,PrixA_E,PrixV_E n'existent pas dans la table TProduits. ABSOLUTE DATABASE me semble bien permisif niveau SQL

    les entrées ne m’intéressent pas du au changement des prix
    Pourtant il y a une solution : une autre jointure sur une sous-requête

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    LEFT JOIN (SELECT CD_PE,Units_E,PrixA_E,PrixV_E FROM TENTREES TE LEFT JOIN  (SELECT CD_PE, MAX(Date_E) EDATE  FROM TENTREES GROUP BY CD_PE) DE ON TE.CD_PE=DE.CD_PE AND TE.Date_E=DE.Date_E) AS E ON E.CD_PE = T.CDP_P
    Ainsi on peut obtenir le dernier PrixA_E et PrixV_E zt unité par E.PRIXA_E,E.PRIXV_E,E.UNITS_E

    c'est cependant loin d'être optimal, et, il faut que des index soient déclarés pour une exécution rapide
    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

  15. #15
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Alors je me demande comment il est possible que le SQL fonctionne correctement car les colonnes Units_E,PrixA_E,PrixV_E n'existent pas dans la table TProduits. ABSOLUTE DATABASE me semble bien permisif niveau SQL
    peut-être elle est couronnée d'une boule de cristal


    Pourtant il y a une solution : une autre jointure sur une sous-requête
    Ainsi on peut obtenir le dernier PrixA_E et PrixV_E et unité par E.PRIXA_E,E.PRIXV_E,E.UNITS_E
    ça c'est une idée d'un grand chef car les prix sont variables

    j'ai essayé intégrée :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT T.CDP_P,T.CD_CT, T.Produits,T.Seuil,E.Units_E,E.PrixA_E,E.PrixV_E,E.Date_E,
    COALESCE(E.Qte_E,0) AS QTE,
    COALESCE(S.QTe_S,0) AS QTS,
    COALESCE(E.QTe_E,0)-COALESCE(S.QTe_S,0) AS Stock
    FROM TProduits T
    LEFT JOIN (SELECT CD_PS,SUM(QTE_S) QTS FROM Tsorties GROUP BY CD_PS) AS S ON S.CD_PS = T.CDP_P
    LEFT JOIN (SELECT CD_PE,Units_E,PrixA_E,PrixV_E FROM TENTREES TE
    LEFT JOIN  (SELECT CD_PE, MAX(Date_E) EDATE  FROM TENTREES
    GROUP BY CD_PE) DE ON TE.CD_PE=DE.CD_PE AND TE.Date_E=DE.Date_E) AS E ON E.CD_PE = T.CDP_P 
    WHERE COALESCE(E.QTe_E,0)-COALESCE(S.QTe_S,0) >0

  16. #16
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 048
    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 048
    Points : 40 968
    Points
    40 968
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par MIWAN Voir le message
    j'ai essayé d'intégrer
    mais qu'en est-il du résultat ?
    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

  17. #17
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Merci pour votre attention MASTER je me contente de cette SQL

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT T.CDP_P,T.CD_CT, T.Produits,T.Seuil,Units_E,PrixA_E,PrixV_E,
    COALESCE(ES.QtE,0) AS QTE,
    COALESCE(S.QTS,0) QTS,
    COALESCE(ES.QTE,0)-COALESCE(S.QTS,0) AS Stock
    FROM TProduits T
    LEFT JOIN (SELECT CD_PE,SUM(QTE_E) QTE FROM TEntrees GROUP BY CD_PE) AS ES ON ES.CD_PE = T.CDP_P
    LEFT JOIN (SELECT CD_PS,SUM(QTE_S) QTS FROM Tsorties GROUP BY CD_PS) AS S ON S.CD_PS = T.CDP_P
    WHERE COALESCE(ES.QTE,0)-COALESCE(S.QTS,0)>0

  18. #18
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 048
    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 048
    Points : 40 968
    Points
    40 968
    Billets dans le blog
    62
    Par défaut
    D'accord, mais qu'en est-il des valeurs de ces colonnes Units_E,PrixA_E,PrixV_E avec ce SQL ?
    A moins qu'ABSOLUTE DATABASE créé ces colonnes sans autre forme de procès, auquel cas elles sont de quel type ainsi créées ?
    Cette syntaxe ne passerait pas avec la plupart des SGBD que je connais Firebird, SQLite, MySQL
    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

  19. #19
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    D'accord, mais qu'en est-il des valeurs de ces colonnes Units_E,PrixA_E,PrixV_E avec ce SQL ?
    A moins qu'ABSOLUTE DATABASE créé ces colonnes sans autre forme de procès, auquel cas elles sont de quel type ainsi créées ?
    Cette syntaxe ne passerait pas avec la plupart des SGBD que je connais Firebird, SQLite, MySQL
    les valeurs de ces colonnes Units_E,PrixA_E,PrixV_E avec ce SQL sont affiché normal ( ne sont pas sommés) or les quantités sont sommées

    excuse de retard.

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

Discussions similaires

  1. Ouvrir, écrire, enregistrer, modifier, créer un fichier .txt
    Par Omion dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 11/12/2006, 07h50
  2. Réponses: 1
    Dernier message: 26/09/2006, 16h44
  3. Réponses: 1
    Dernier message: 24/01/2006, 10h55
  4. enregistrement modifiés ?
    Par fazerman dans le forum Access
    Réponses: 8
    Dernier message: 12/09/2005, 17h21
  5. Compter les enregistrements modifiés
    Par Fabby69 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/10/2004, 14h12

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