|
Débuté par Wind, 23 mar. 2017 19:27 - 4 réponses |
| |
| | | |
|
| |
Posté le 23 mars 2017 - 19:27 |
Bonjour tout le monde
Je voulais afficher dans une table mémoire et depuis un seul fichier "COMANDES" tous les clients et leurs mouvements (Client,TotalVente , TotalAvoir, Solde),donc j'ai crée le code sql suivant :
sDateMin est une chaîne= SAI_Du sDateMax est une chaîne= SAI_Au
sEtatVente est une chaîne="FA,BL" //Ventes sEtatAvoir est une chaîne="AV,RB" / Avoir/Retour
sContenuReq_Facture est une chaîne="SELECT COMANDES.NumClient AS NumClient, "... +"SUM(COMANDES.TOTALTTC) AS la_somme_vente FROM COMANDES WHERE "... +"COMANDES.dateDoc BETWEEN ' "+sDateMin+" ' AND '"+sDateMax+"' "...
+"AND COMANDES.ETATCOMMANDE IN {sEtatVente} "... // VENTES .................
+"GROUP BY COMANDES.NumClient,COMANDES.ETATCOMMANDE"
Jusqu'à ici l'affichage s'est bien fait (les clients et leurs sommes des ventes)
Alors comment je concaténé le code sql ci dessus ,qui me permet de calculer le total des avoirs, avec le code ci dessous pour avoir une seul code sql
"SELECT COMANDES.NumClient AS NumClient, "... +"SUM(COMANDES.TOTALTTC) AS la_somme_vente FROM COMANDES WHERE "... +"COMANDES.dateDoc BETWEEN ' "+sDateMin+" ' AND '"+sDateMax+"' "...
+"AND COMANDES.ETATCOMMANDE IN {sEtatAvoirs} "... // AVOIR ........
+"GROUP BY COMANDES.NumClient,COMANDES.ETATCOMMANDE"
Je suis bloqué donnez moi une piste
Merci d'avance |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 23 mars 2017 - 23:35 |
Bonsoir,
En utilisant le mot "UNION" cela devrait donner un truc du genre (je vous conseille d'utiliser la notation [] et ChaineConstruit() pour fabriquer votre requête, plutôt que la concaténation avec "+" qui devient vite illisible)
RequeteGenerale est une chaîne = [ SELECT COMANDES.NumClient AS NumClient, SUM(COMANDES.TOTALTTC) AS la_somme_vente FROM COMANDES WHERE COMANDES.dateDoc BETWEEN '%1' AND '%2' AND COMANDES.ETATCOMMANDE IN {%3} GROUP BY COMANDES.NumClient,COMANDES.ETATCOMMANDE UNION SELECT COMANDES.NumClient AS NumClient, SUM(COMANDES.TOTALTTC) AS la_somme_vente FROM COMANDES WHERE COMANDES.dateDoc BETWEEN '%1' AND '%2' AND COMANDES.ETATCOMMANDE IN {%4} GROUP BY COMANDES.NumClient,COMANDES.ETATCOMMANDE ] RequeteGenerale = ChaîneConstruit(RequeteGenerale, sDateMin, sDateMax, sEtatVente, sEtatAvoir) |
| |
| |
| | | |
|
| | |
| |
Posté le 24 mars 2017 - 08:17 |
Philippe Pasquali vient de nous annoncer :
Bonsoir, En utilisant le mot "UNION" cela devrait donner un truc du genre (je vous conseille d'utiliser la notation [] et ChaineConstruit() pour fabriquer votre requête, plutôt que la concaténation avec "+" qui devient vite illisible) RequeteGenerale est une chaîne = [ SELECT COMANDES.NumClient AS NumClient, SUM(COMANDES.TOTALTTC) AS la_somme_vente FROM COMANDES WHERE COMANDES.dateDoc BETWEEN '%1' AND '%2' AND COMANDES.ETATCOMMANDE IN {%3} GROUP BY COMANDES.NumClient,COMANDES.ETATCOMMANDE UNION SELECT COMANDES.NumClient AS NumClient, SUM(COMANDES.TOTALTTC) AS la_somme_vente FROM COMANDES WHERE COMANDES.dateDoc BETWEEN '%1' AND '%2' AND COMANDES.ETATCOMMANDE IN {%4} GROUP BY COMANDES.NumClient,COMANDES.ETATCOMMANDE ] RequeteGenerale = ChaîneConstruit(RequeteGenerale, sDateMin, sDateMax, sEtatVente, sEtatAvoir)
faire comme ceci (à corriger si nécessaire)
Req est chaine = [ select COMANDES.NumClient, sum(case when COMANDES.ETATCOMMANDE in (%1) then COMANDES.TOTALTTC else 0 end) as la_somme_vente, sum(case when COMANDES.ETATCOMMANDE in (%2) then COMANDES.TOTALTTC else 0 end) as la_somme_avoir from COMANDES COMANDES.dateDoc BETWEEN %2 and %3 GROUP BY COMANDES.NumClient ]
sEtatVente = "'V','X'" sEtatAvoir = "'A','Y'"
Req = ChaîneConstruit(Req,sEtatVente, sEtatAvoir,sDateMin, sDateMax) etc....
-- Cordialement JeAn-PhI |
| |
| |
| | | |
|
| | |
| |
Posté le 24 mars 2017 - 08:45 |
Bonjour Pasquali et merci de votre réponse
Oui ça marche, mais par programmation j'arrive pas à différencier entre les ventes et les avoirs tant que ayant le même nom (la_somme_vente) parce que je veux calculer et afficher la différence entre les ventes et les avoirs ResultatFinal =la_somme_vente -la_somme_vente(Avoir)
RequeteGenerale est une chaîne = [ SELECT COMANDES.NumClient AS NumClient, SUM(COMANDES.TOTALTTC) AS la_somme_vente FROM COMANDES WHERE COMANDES.dateDoc BETWEEN '%1' AND '%2' AND COMANDES.ETATCOMMANDE IN {%3} GROUP BY COMANDES.NumClient,COMANDES.ETATCOMMANDE UNION SELECT COMANDES.NumClient AS NumClient, SUM(COMANDES.TOTALTTC) AS la_somme_vente FROM COMANDES WHERE COMANDES.dateDoc BETWEEN '%1' AND '%2' AND COMANDES.ETATCOMMANDE IN {%4} GROUP BY COMANDES.NumClient,COMANDES.ETATCOMMANDE ] RequeteGenerale = ChaîneConstruit(RequeteGenerale, sDateMin, sDateMax, sEtatVente, sEtatAvoir) SI PAS HExécuteRequêteSQL(sdSourceRequete,hRequêteDéfaut,ContenuRequete)ALORS Erreur(HErreurInfo()) RETOUR FIN POUR TOUT sdSourceRequete Trace(sdSourceRequete.NumClient, "Vente = "+sdSourceRequete.la_somme_vente, "Avoir = "+sdSourceRequete.la_somme_vente)
FIN Voila le résultat dans le trace
1 Vente = 3804 Avoir = 3804 5 Vente = 3907.2 Avoir = 3907.2 6 Vente = 9834 Avoir = 9834 7 Vente = 3323.6 Avoir = 3323.6 8 Vente = 15320.8 Avoir = 15320.8 9 Vente = 16969.8 Avoir = 16969.8 11 Vente = 15341.35 Avoir = 15341.35 12 Vente = 1654.4 Avoir = 1654.4 13 Vente = 595.2 Avoir = 595.2
1 Vente = 155 Avoir = 155 4 Vente = 1202 Avoir = 1202 5 Vente = 120 Avoir = 120 7 Vente = 0 Avoir = 0 9 Vente = 223.2 Avoir = 223.2 11 Vente = 96 Avoir = 96
Merci de votre aide |
| |
| |
| | | |
|
| | |
| |
Posté le 24 mars 2017 - 10:09 |
Bonjour JeAn-PhI
Merci pour ton aide ca marche, seulement tu es oublier WHERE et remplacer 2% avec %
Merci |
| |
| |
| | | |
|
| | | | |
| | |
|