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

WinDev Discussion :

Somme des champs


Sujet :

WinDev

  1. #1
    Nouveau Candidat au Club
    Somme des champs
    Bonjour,

    Une question bête,j'aimerai connaître la syntaxe SQL pour faire la somme de plusieurs champs d'une table

    champ E = champ A + champ B - champ C + champ D from (MaTable)

    J'ai essayé avec l'éditeur de requêtes avec Fx rubrique calculée, mais semble pas fonctionner.
    Donc l'état que je dois imprimer est faux.

    Merci à tous

  2. #2
    Expert éminent
    Bonjour,
    Dans le langage "WinDev", une table est le widget présent dans une fenêtre, et la base contient des fichiers avec des rubriques.
    Comme tu parles de SQL, je vais ignorer le "dialecte" WinDev.

    Pour faire la somme de colonne dans une table en SQL, la syntaxe est toute simple:
    Code sql :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    select col1 + col2 + col3 as ColCalculee
    from MaTable

    Il n'y a pas besoin de faire une affectation, à moins que tu ne veuilles mettre à jour les données dans la base, ce que tu ne sembles pas vouloir faire.
    Cela étant dit, je ne peux pas t'aider sur l'éditeur de requête, je ne m'en sers jamais.

    Tatayo.

  3. #3
    Membre chevronné
    Si on avait ton analyse, ce serait déjà plus simple.
    Tes données racontent une histoire. L'analyse (le MPD,) c'est leur environnement : l'endroit où elles habitent, l'endroit où elle travaillent, comment elles s'habillent, leur famille...
    Là on sait qu'elles font un travail, mais on ne sait pas trop lequel, ni si elles ont le diplôme pour le faire...
    Il y a peut être plus simple, mais ça tourne

  4. #4
    Nouveau Candidat au Club
    Somme des colonnes
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Dans le langage "WinDev", une table est le widget présent dans une fenêtre, et la base contient des fichiers avec des rubriques.
    Comme tu parles de SQL, je vais ignorer le "dialecte" WinDev.

    Pour faire la somme de colonne dans une table en SQL, la syntaxe est toute simple:
    Code sql :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    select col1 + col2 + col3 as ColCalculee
    from MaTable

    Il n'y a pas besoin de faire une affectation, à moins que tu ne veuilles mettre à jour les données dans la base, ce que tu ne sembles pas vouloir faire.
    Cela étant dit, je ne peux pas t'aider sur l'éditeur de requête, je ne m'en sers jamais.

    Tatayo.
    Merci Tatayo,

    Je m'y mettrais ce soir en créant une seconde requête.

    Bonne soirée

  5. #5
    Nouveau Candidat au Club
    Somme des champs
    Bonsoir,

    C'est bête, je pensais que ma piste était la bonne, mais cela ne fonctionne pas comme je le souhaiterais.

    Le code de Tatayo fonctionne très bien et donne le bon résultat, la requête que j'avais auparavant aussi, mais indépendant l'une de l'autre.

    Je vais essayé de trouver la solution, mais ce n'est pas gagné.

    Merci

  6. #6
    Nouveau Candidat au Club
    Somme des champs
    Bonsoir,

    J'ai réussi, j'ai trouvé la solution toute seule. Je suis fier de moi

    Bonne nuit et merci

  7. #7
    Expert éminent
    Bravo à toi, mais tu as le droit d'expliquer comment tu as fait.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Make it real not fantasy.

  8. #8
    Nouveau Candidat au Club
    Somme des champs
    Citation Envoyé par frenchsting Voir le message
    Bravo à toi, mais tu as le droit d'expliquer comment tu as fait.
    Bonjour,

    J'ai tout simplement insérer la ligne donné par Tatayo dans ma première requête, c'était tellement simple

    col1 + col2 + col3 as ColCalculee

    Merci à tous

  9. #9
    Nouveau Candidat au Club
    Somme des champs
    Bonjour,

    Fausse joie, j'ai un dernier problème que je vous expose ci dessous :

    Lorsque je mets dans affichage d'une ligne de ma table : valeur = champ A * champ B, la valeur s'affiche bien.
    En revanche, si dans ma requête je mets la ligne suivante : SUM (champ A * champ B) AS valeur, le total ne s'affiche pas, ce qui fausse évidemment mon état à imprimer.

    J'ai fait des recherches depuis hier soir, sans résultats. Pouvez-vous me dire où est le problème.

    Merci pour votre aide

  10. #10
    Expert éminent
    Pour savoir d'où vient le problème, il nous faudrait le code complet de la requête, un jeu de test, le résultat attendu et le résultat obtenu.
    Et aussi le code où cette requête est utilisée.

    Tatayo.

  11. #11
    Nouveau Candidat au Club
    Somme des champs
    Citation Envoyé par hilander Voir le message
    Bonjour,

    Fausse joie, j'ai un dernier problème que je vous expose ci dessous :

    Lorsque je mets dans affichage d'une ligne de ma table : valeur = champ A * champ B, la valeur s'affiche bien.
    En revanche, si dans ma requête je mets la ligne suivante : SUM (champ A * champ B) AS valeur, le total ne s'affiche pas, ce qui fausse évidemment mon état à imprimer.

    J'ai fait des recherches depuis hier soir, sans résultats. Pouvez-vous me dire où est le problème.

    Merci pour votre aide
    Citation Envoyé par tatayo Voir le message
    Pour savoir d'où vient le problème, il nous faudrait le code complet de la requête, un jeu de test, le résultat attendu et le résultat obtenu.
    Et aussi le code où cette requête est utilisée.

    Tatayo.
    Bonjour,

    Si je vous donne mon code, vous n'allez sans doute pas me répondre en le découvrant. Pourtant il ne me reste plus que cette anomalie à solutionner.

  12. #12
    Membre chevronné
    Pourquoi Anakinsqt ?
    Il y a peut être plus simple, mais ça tourne

  13. #13
    Nouveau Candidat au Club
    Somme des champs
    Citation Envoyé par Voroltinquo Voir le message
    Pourquoi Anakinsqt ?
    Bonjour Voroltinquo,
    Oui, je suis désolé de vous avoir menti et d'avoir changé mon pseudo, mais vu le contexte ... Mais j'ai compris la leçon.
    J'ai préféré aborder mon problème autrement et j'ai suivi vos conseils et m'y suis pris autrement pour mon projet, c'est pas top mais cela fonctionne.
    Tout fonctionne, sauf ce dernier problème de code de ma requête que je vous mets ci dessous :

    Code SQL :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
     
    SELECT 
    	Produits.Produits AS Produits,	
    	Produits.Conditionnement AS Conditionnement,	
    	Régularisation.Stock_Initial AS Stock_Initial,	
    	SUM(Livraisons.Quantité_Livrée) AS la_somme_Quantité_Livrée,	
    	SUM(Sorties.Quantité_Sortie) AS la_somme_Quantité_Sortie,	
    	Régularisation.Régul_Stock AS Régul_Stock,	
    	Produits.Prix_Unitaire AS Prix_Unitaire,	
    	SUM(Stock_Initial + Livraisons.Quantité_Livrée - Sorties.Quantité_Sortie + Régul_Stock) AS Stock_Final,
    	SUM(Stock_Final * Prix_Unitaire) AS Valeur_Stock
     
    FROM 
    	Produits,	
    	Livraisons,	
    	Sorties,	
    	Régularisation
    WHERE 
    	Produits.IDProduits = Régularisation.IDProduits
    	AND		Produits.IDProduits = Sorties.IDProduits
    	AND		Produits.IDProduits = Livraisons.IDProduits
     
    GROUP BY 
    	Produits.Produits,	
    	Produits.Conditionnement,	
    	Produits.Prix_Unitaire,	
    	Régularisation.Stock_Initial,	
    	Régularisation.Régul_Stock,	
    	Régularisation.Stock_Final


    Encore pardon, et merci pour votre aide.

  14. #14
    Membre chevronné
    Dans un premier temps, si on pouvait avoir l'analyse ce serait bien, j'ai l'impression qu'il y a des rustines un peu partout.
    Dans un deuxième temps, si tu pouvais utiliser le bouton # pour afficher ton code ce serait mieux, et plus lisible surtout.
    Il y a peut être plus simple, mais ça tourne

  15. #15
    Nouveau Candidat au Club
    Citation Envoyé par Voroltinquo Voir le message
    Dans un premier temps, si on pouvait avoir l'analyse ce serait bien, j'ai l'impression qu'il y a des rustines un peu partout.
    Dans un deuxième temps, si tu pouvais utiliser le bouton # pour afficher ton code ce serait mieux, et plus lisible surtout.
    Voici mes fichiers de données, je n'ai pas trouvé d'autre solution pour résoudre mon problème antérieur, mais çà tourne et l'amélioration est sans doute possible.



    Pour ta remarque concernant le bouton #, je le vois bien, peux-tu m'expliquer on procède afin que mon code soit comme vous tous.

    Merci beaucoup

  16. #16
    Rédacteur/Modérateur

    J'imagine que le problème est sur cette ligne : SUM(Stock_Initial + Livraisons.Quantité_Livrée - Sorties.Quantité_Sortie + Régul_Stock) AS Stock_Final
    avec cette commande, Windeve additionne plusieurs fois Stck_initial et Régul_Stock.
    Tu voudrais avoir : Stock_Initial +Régul_Stock)+ SUM( Livraisons.Quantité_Livrée - Sorties.Quantité_Sortie ) AS Stock_Final mais malheureusement, la syntaxe est refusée.

    Et il y a aussi un problème sur la valeur du stock. Pour calculer la valeur du stock, tu utilises stock_final, et stock_final n'est pas connu. Je vais revenir là dessus à la fin.

    Il y a un contournement :

    Code SQL :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
     
    SELECT
    Produits.Produits AS Produits,
    Produits.Conditionnement AS Conditionnement,
    Régularisation.Stock_Initial AS Stock_Initial,
    SUM(Livraisons.Quantité_Livrée) AS la_somme_Quantité_Livrée,
    SUM(Sorties.Quantité_Sortie) AS la_somme_Quantité_Sortie,
    Régularisation.Régul_Stock AS Régul_Stock,
    Produits.Prix_Unitaire AS Prix_Unitaire,
    SUM( Livraisons.Quantité_Livrée - Sorties.Quantité_Sortie ) AS Variation_Stock  
     
    FROM
    Produits,
    Livraisons,
    Sorties,
    Régularisation
    WHERE
    Produits.IDProduits = Régularisation.IDProduits
    AND Produits.IDProduits = Sorties.IDProduits
    AND Produits.IDProduits = Livraisons.IDProduits
     
    GROUP BY
    Produits.Produits,
    Produits.Conditionnement,
    Produits.Prix_Unitaire,
    Régularisation.Stock_Initial,
    Régularisation.Régul_Stock,
    Régularisation.Stock_Final

    Cette requête te renvoie le stock initial , la regul_stock, et la variation_de_stock ... c'est presque bon.



    Code SQL :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
     
    SELECT Produits , conditionnnement, Stock_initial, la_somme_Quantité_Livrée ,  la_somme_Quantité_Sortie , Régul_Stock , Prix_Unitaire,    
       Stock_Initial+Régul_stock+Variation_stock as stock_final, (Stock_Initial+Régul_stock+Variation_stock ) * Prix_Unitaire as Valeur_stock
    SELECT
    Produits.Produits AS Produits,
    Produits.Conditionnement AS Conditionnement,
    Régularisation.Stock_Initial AS Stock_Initial,
    SUM(Livraisons.Quantité_Livrée) AS la_somme_Quantité_Livrée,
    SUM(Sorties.Quantité_Sortie) AS la_somme_Quantité_Sortie,
    Régularisation.Régul_Stock AS Régul_Stock,
    Produits.Prix_Unitaire AS Prix_Unitaire,
    SUM( Livraisons.Quantité_Livrée - Sorties.Quantité_Sortie ) AS Variation_Stock ,
    SUM(Stock_Final * Prix_Unitaire) AS Valeur_Stock
     
    FROM
    Produits,
    Livraisons,
    Sorties,
    Régularisation
    WHERE
    Produits.IDProduits = Régularisation.IDProduits
    AND Produits.IDProduits = Sorties.IDProduits
    AND Produits.IDProduits = Livraisons.IDProduits
     
    GROUP BY
    Produits.Produits,
    Produits.Conditionnement,
    Produits.Prix_Unitaire,
    Régularisation.Stock_Initial,
    Régularisation.Régul_Stock,
    Régularisation.Stock_Final
    )


    Je suis assez confiant sur la syntaxe, la requête devrait être acceptée. Le résultat sera-t-il correct ? J'ai un gros doute. J'ai peur qu'il y ait des trucs comptés plusieurs fois. Et j'ai peur aussi que les produits qui n'ont eu aucune ligne vendue n'apparaissent pas, alors qu'on voudrait probablement les voir (stock_final = stock_initial ... )

    Sur l'histoire de la valeur_stock, on a stock_final, mais peut-on le réutiliser plus loin dans la requête ?
    Si on a des sous requêtes, oui :

    Code SQL :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select AA , ... 
    from
    (select sum(BB) AA from monFichier)        
    -- Cette requete est correcte.


    Par contre, ceci n'est pas valide :
    Code SQL :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    select sum(BB) as AA, AA*prix as CC  
    from  monFichier       
    -- Cette requete est incorrecte , AA ne peut pas être réutilisé à cet endroit.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  17. #17
    Nouveau Candidat au Club
    Somme des champs
    Bonjour tbc92,

    Merci pour votre réponse, j'ai lu avec attention votre code SQL et c'est vrai qu'il y a un patacaisse, comme disait Mel Gibson dans l'arme fatale, dans le mien.
    Je vais tester votre code ce soir, et je vous tiendrais au courant, vous avez plus d'expérience que moi donc il devrait fonctionner.
    Pouvez-vous m'expliquer le fonctionnement du # lorsque j'envoie du code sur ce forum.

    Encore merci

  18. #18
    Rédacteur/Modérateur

    Pour mettre la balise code :
    Cliquer sur le bouton #
    Ça met ceci dans le message [CODE][/CODE]
    Au milieu, mettre le code Windev ou le code SQL [CODE]i est un entier[/CODE]
    Le forum 'sait' qu'on est dans un sous-forum Windev, donc il va colorier les mots-clés de Windev en bleu ...
    Si le code qu'on tape est du code SQL, c'est déjà pas mal de mettre la balise CODE, mais c'est encore mieux de mettre : [CODE=SQL]select * from monfichier[/CODE].
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  19. #19
    Nouveau Candidat au Club
    Somme des champs
    Bonsoir tbc92,
    J'ai testé ta requête et çà bug, ligne 4 (message erreur : Mot select inattendu), si je retire SELECT c'est la ligne 5 (message erreur : mot produits inattendu).
    Mais tu m'avais prévenu. Cela vient peut-être de la conception de ma table fichier ? Je vais regarder avec certaines lignes de ton code s'il n'est pas possible de modifier le mien, j'en doute mais je vais essayer.
    Peut-être as-tu une autre piste.
    Merci

  20. #20
    Rédacteur/Modérateur

    Non, grosse étourderie dans ma requête , il manquait FROM (:

    Code SQL :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 Produits , conditionnnement, Stock_initial, la_somme_Quantité_Livrée ,  la_somme_Quantité_Sortie , Régul_Stock , Prix_Unitaire,    
       Stock_Initial+Régul_stock+Variation_stock as stock_final, (Stock_Initial+Régul_stock+Variation_stock ) * Prix_Unitaire as Valeur_stock
    FROM 
    (
    SELECT
    Produits.Produits AS Produits,
    Produits.Conditionnement AS Conditionnement,
    Régularisation.Stock_Initial AS Stock_Initial,
    SUM(Livraisons.Quantité_Livrée) AS la_somme_Quantité_Livrée,
    SUM(Sorties.Quantité_Sortie) AS la_somme_Quantité_Sortie,
    Régularisation.Régul_Stock AS Régul_Stock,
    Produits.Prix_Unitaire AS Prix_Unitaire,
    SUM( Livraisons.Quantité_Livrée - Sorties.Quantité_Sortie ) AS Variation_Stock ,
    SUM(Stock_Final * Prix_Unitaire) AS Valeur_Stock
     
    FROM
    Produits,
    Livraisons,
    Sorties,
    Régularisation
    WHERE
    Produits.IDProduits = Régularisation.IDProduits
    AND Produits.IDProduits = Sorties.IDProduits
    AND Produits.IDProduits = Livraisons.IDProduits
     
    GROUP BY
    Produits.Produits,
    Produits.Conditionnement,
    Produits.Prix_Unitaire,
    Régularisation.Stock_Initial,
    Régularisation.Régul_Stock,
    Régularisation.Stock_Final
    )
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

###raw>template_hook.ano_emploi###