j'ai essayé avec select , union et sum(qte) et j'ai pas reussi.
je veux de l'aide .ça me fatigue depuis 3 jours. et Merci d'avance.
Pièce jointe 461113
Version imprimable
j'ai essayé avec select , union et sum(qte) et j'ai pas reussi.
je veux de l'aide .ça me fatigue depuis 3 jours. et Merci d'avance.
Pièce jointe 461113
Bonjour,
Aucune indication de SGBD ! C'est dommage car ce qui fonctionnera avec des SGBD récents ne sera pas forcément le cas avec Paradox, pis selon le SGBD la syntaxe ne sera pas la même
voilà déjà un vieux moyen de mettre ensemble les deux tables
Code:
1
2
3
4 SELECT CODE, MAX(DESIGNATION),SUM(QTE) AS E,SUM(0) AS S FROM ENTREE WHERE Date Between :DEBUT AND :FIN GROUP BY CODE UNION SELECT CODE,MAX(DESIGNATION),SUM(0), SUM(QTE) FROM SORTIE WHERE Date Between :DEBUT AND :FIN GROUP BY CODE
une fois ceci fait un nouveau SELECT va donner la balance
Code:SELECT CODE,MAX(DESIGNATION),SUM(E) AS ENTREES, SUM(S) AS SORTIES FROM TABLEUNION GROUP BY CODE
Je pense que vous avez remarqué l'absurdité de votre structure de table avec l'information redondante de DESIGNATION, j'ai été obligé de recourir à une astuce MAX(DESIGNATION) , il aurait fallu une table ARTICLE indépendante
Nommer une colonne 'DATE' est aussi une faute car souvent il s'agit d'un mot réservé
bONJOUR , Je suis désolé , le SGBD : ACCES
votre code me donne: "erreur Paramètre défini de manière incorrecte".Code:
1
2
3
4
5
6
7 dm.cmd.close; dm.cmd.SQL.clear; dm.cmd.SQL.add('CODE,MAX(DESIGNATION),SUM(0), SUM(QTE) FROM lignes_ventes where datevalue(date) between :a1 and :a2 union select CODE, MAX(DESIGNATION),SUM(QTE) AS E,SUM(0) AS S FROM lignes_achats where datevalue(date) between :a1 and :a2'); dm.cmd.Parameters.parambyname('a1').value:=strtodate(maskedit1.text); dm.cmd.parameters.parambyname('a2').value:=strtodate(maskedit2.text); dm.cmd.open;
:arf: Vous avez mal copié mon code il manque un SELECT
ensuite ce seul code ne suffit pas il faut allier les deux parties soit dans une CTE (common table expression)
soit si les CTE ne sont pas possiblesCode:
1
2
3
4
5 WITH A AS (SELECT CODE, MAX(DESIGNATION),SUM(QTE) AS E,SUM(0) AS S FROM ENTREE WHERE Date Between :DEBUT AND :FIN GROUP BY CODE UNION SELECT CODE,MAX(DESIGNATION),SUM(0), SUM(QTE) FROM SORTIE WHERE Date Between :DEBUT AND :FIN GROUP BY CODE) SELECT CODE,MAX(DESIGNATION),SUM(E) AS ENTREES, SUM(S) AS SORTIES FROM A GROUP BY CODE
Code:
1
2
3
4
5 SELECT CODE,MAX(DESIGNATION),SUM(E) AS ENTREES, SUM(S) AS SORTIES FROM (SELECT CODE, MAX(DESIGNATION),SUM(QTE) AS E,SUM(0) AS S FROM ENTREE WHERE Date Between :DEBUT AND :FIN GROUP BY CODE UNION SELECT CODE,MAX(DESIGNATION),SUM(0), SUM(QTE) FROM SORTIE WHERE Date Between :DEBUT AND :FIN GROUP BY CODE) GROUP BY CODE
Le fait que ce soit Access me fait douter, je ne suis pas un fan de ce "pseudo" SGBD
de plus je sais que ADO risque de poser un souci au niveau des paramètres, il vous faudra peut-être nommer différemment ceux d'une des deux requêtes de façon à avoir 4 et non 2 paramètres à fournir
Ereur : avec la meme requette
Pièce jointe 461248
Code:
1
2
3
4
5
6
7
8
9
10 dm.cmd.close; dm.cmd.SQL.clear; dm.cmd.SQL.add('SELECT CODE,max(DESIGNATION),SUM(E) AS ENTREES, SUM(S) AS SORTIES FROM (SELECT CODE, max(DESIGNATION),SUM(QTE) AS E,SUM(0) AS S FROM lignes_achats WHERE datevalue(date) Between :a1 AND :a2 GROUP BY CODE '); dm.cmd.SQL.Add(' UNION '); dm.cmd.SQL.Add(' SELECT CODE,max(DESIGNATION),SUM(0), SUM(QTE) FROM lignes_ventes WHERE datevalue(date) Between :a1 AND :a2 GROUP BY CODE) '); dm.cmd.SQL.Add(' GROUP BY CODE '); dm.cmd.Parameters.parambyname('a1').value:=strtodate(maskedit1.text); dm.cmd.parameters.parambyname('a2').value:=strtodate(maskedit2.text); dm.cmd.open;
Vous faut-il une paire de lunettes ?Citation:
Envoyé par SergioMaster
Faites un peu attention avant d'écrire ce genre de message, vous avez juste pris en compte le fait que j'avais indiqué qu'il manquait un SELECT et n'êtes pas allé plus loin il y a de quoi être :furax:
Maintenant j'ai 4 param et meme Problème , Monsieur Sergio ,je suis sérieux , je suis pas entrain de rigoler , je suis vraiment désolé de ne pas avoir vu votre citation.Code:
1
2
3
4
5
6
7
8
9
10
11
12 dm.cmd.close; dm.cmd.SQL.clear; dm.cmd.SQL.add('SELECT CODE,max(DESIGNATION),SUM(E) AS ENTREES, SUM(S) AS SORTIES FROM (SELECT CODE, max(DESIGNATION),SUM(QTE) AS E,SUM(0) AS S FROM lignes_achats WHERE datevalue(date) Between :a1 AND :a2 GROUP BY CODE '); dm.cmd.SQL.Add(' UNION '); dm.cmd.SQL.Add(' SELECT CODE,max(DESIGNATION),SUM(0), SUM(QTE) FROM lignes_ventes WHERE datevalue(date) Between :b1 AND :b2 GROUP BY CODE) '); dm.cmd.SQL.Add(' GROUP BY CODE '); dm.cmd.Parameters.parambyname('a1').value:=strtodate(maskedit1.text); dm.cmd.parameters.parambyname('a2').value:=strtodate(maskedit2.text); dm.cmd.Parameters.parambyname('b1').value:=strtodate(maskedit1.text); dm.cmd.parameters.parambyname('b2').value:=strtodate(maskedit2.text); dm.cmd.open;
J'ai peut-être mal transcrit le truc sans CTE mais je n'ai rien de Microsoft Office sur mon poste.
Vous devriez faire le test sur Access avant de coder !
testez d'abord la partie Union puis vérifiez si l'utilisation de la CTE est possible (ce qui rend le SQL plus clair)
Bonjour;
j'ai essayé sur Access et je me sent très prêt de finaliser ce problème Pièce jointe 461585
Aprés l'execution juste un problème dans la désignation il s'affiche un box
Pièce jointe 461591
et quand tu me par exemple "B" ça donne ceci :Pièce jointe 461593
Danc je pense , il me reste pas bcp , un petit souci dans le paramétrage de Désignation , à la place de B je veux mes Désignations selon ses codes.
Il manque tout simplement un nom d'alias à Max(DESIGNATION) ,a minima une fois dans l'union
Code:
1
2
3
4
5
6 SELECT CODE,MAX(DESIGNATION) AS DESIGNATION,SUM(E) AS ENTREES, SUM(S) AS SORTIES FROM (SELECT CODE, MAX(DESIGNATION) AS DESIGNATION,SUM(QTE) AS E,SUM(0) AS S FROM ENTREE WHERE Date Between :DEBUT AND :FIN GROUP BY CODE UNION SELECT CODE,MAX(DESIGNATION),SUM(0), SUM(QTE) FROM SORTIE WHERE Date Between :DEBUT AND :FIN GROUP BY CODE) GROUP BY CODE
Il n'empêche que votre structure de base de données est à revoir, la redondance de la colonne DESIGNATION est anormale pouvant amener des erreurs
Code:
1
2
3
4
5
6
7 SELECT U.CODE,A.DESIGNATION ,SUM(U.E) AS ENTREES, SUM(U.S) AS SORTIES FROM (SELECT CODE, SUM(QTE) AS E,SUM(0) AS S FROM ENTREE WHERE Date Between :DEBUT AND :FIN GROUP BY CODE UNION SELECT CODE, SUM(QTE) FROM SORTIE WHERE Date Between :DEBUT AND :FIN GROUP BY CODE) U JOIN ARTICLES A ON A.CODE=U.CODE GROUP BY CODE
et que c'est dommage de ne pas pouvoir utiliser les CTE qui rendent le code beaucoup plus compréhensible
Code:
1
2
3
4
5
6
7 WITH U AS (SELECT CODE,SUM(QTE) AS E,SUM(0) AS S FROM ENTREE WHERE Date Between :DEBUT AND :FIN GROUP BY CODE UNION SELECT CODE,SUM(0), SUM(QTE) FROM SORTIE WHERE Date Between :DEBUT AND :FIN GROUP BY CODE) SELECT U.CODE,A.DESIGNATION,SUM(E) AS ENTREES, SUM(S) AS SORTIES FROM U JOIN ARTICLES A ON A.CODE=U.CODE GROUP BY CODE
c'est résolu , Merci le grand monsieur .Code:
1
2
3
4
5
6
7
8
9
10
11
12 dm.cmd.close; dm.cmd.SQL.clear; dm.cmd.SQL.add('SELECT CODE,MAX(D) as DESIGNATION ,SUM(E) AS ENTREES, SUM(S) AS SORTIES FROM '); dm.cmd.SQL.Add(' (SELECT CODE, MAX(DESIGNATION) AS D,SUM(QTE) AS E,SUM(0) AS S FROM lignes_achats WHERE datevalue(date) Between :a1 AND :a2 GROUP BY CODE '); dm.cmd.SQL.Add(' UNION '); dm.cmd.SQL.Add(' SELECT CODE,MAX(DESIGNATION) as D,SUM(0), SUM(QTE) FROM lignes_ventes WHERE datevalue(date) Between :a1 AND :a2 GROUP BY CODE) '); dm.cmd.SQL.Add(' GROUP BY CODE '); dm.cmd.Parameters.parambyname('a1').value:=strtodate(maskedit1.text); dm.cmd.parameters.parambyname('a2').value:=strtodate(maskedit2.text); dm.cmd.open;
Obs: Dans Acces il faut adapter plus de deux Param (:a1,:a2) par exemple pour la première opération et(:b1,:b2) pour la deuxième opération .