|
Une seule requête sql au lieu d'une boucle |
Iniciado por simon, set., 25 2017 8:22 AM - 9 respostas |
| |
| | | |
|
| |
Publicado em setembro, 25 2017 - 8:22 AM |
Bonjour
Je voudrais afficher le journal de caisse mensuel (12 mois) (total esp, total chq, total crdit)
TableSupprimeTout(TableJournalCaisse)
POUR K= 1 A 12 mois est une chaîne=ChaîneConstruit(" AND VENTES.Mois_Doc ='%1' ",K) fnContenuRequete = [ select VENTES.Mois_Doc as Mois_Doc , sum(case when VENTES.ETATCOMMANDE in (%1) AND VENTES.ModeReglement ='ESPECE' then VENTES.TOTALTTC else 0 end) as V_ESP, sum(case when VENTES.ETATCOMMANDE in (%1) AND VENTES.ModeReglement ='EN COMPTE' then FCommandes.TOTALTTC else 0 end) as V_CRD, sum(case when VENTES.ETATCOMMANDE in (%1) AND VENTES.ModeReglement ='CHEQUE' then VENTES.TOTALTTC else 0 end) as V_CHQ, // Partie avoir sum(case when VENTES.ETATCOMMANDE in (%2) AND VENTES.ModeReglement ='ESPECE' then VENTES.TOTALTTC else 0 end) as A_ESP, sum(case when FCommandes.ETATCOMMANDE in (%2) AND VENTES.ModeReglement ='EN COMPTE' then VENTES.TOTALTTC else 0 end) as A_CRD, sum(case when VENTES.ETATCOMMANDE in (%2) AND VENTES.ModeReglement ='CHEQUE' then VENTES.TOTALTTC else 0 end) as A_CHQ
FROM VENTES
WHERE VENTES.EtatTransfert <> '1' %3 GROUP BY Mois_Doc ORDER BY Mois_Doc ASC ] nContenuRequete=ChaîneConstruit(fnContenuRequete,"'FA'","'AV'",mois )
SI PAS HExécuteRequêteSQL(fnsdSourceRequete,hRequêteDéfaut,fnContenuRequete)ALORS Erreur(HErreurInfo()) RETOUR FIN SI HNbEnr(fnsdSourceRequete)<>0 ALORS TableAjouteLigne(TableJournalCaisse,... K,... (fnsdSourceRequete.V_esp-fnsdSourceRequete.A_esp),... fnsdSourceRequete.V_CHQ,... fnsdSourceRequete.V_CRD) FIN FIN
HAnnuleDéclaration(fnsdSourceRequete)
Ma question: Pour rendre mon code plus rapide je veux éviter la boucle POUR mais je n'arrive pas comment je lance une requête sql qui me renvoie les 12 mois, avec une boucle sur le résultat.
Merci d'avance pour vos aides |
| |
| |
| | | |
|
| | |
| |
Membro registado 841 mensagems Popularité : +19 (27 votes) |
|
Publicado em setembro, 25 2017 - 9:37 AM |
Bonjour,
Retirer la clause pour le mois puis effectuer les requêtes mois sur la requête en mémoire. En interne les requêtes sont instantanées et il n'y aura qu'une requête en externe.
-- Cordialement, Camus |
| |
| |
| | | |
|
| | |
| |
Publicado em setembro, 25 2017 - 11:31 AM |
Merci camus
je vais enlevé la clause mois est une chaîne=ChaîneConstruit(" AND VENTES.Mois_Doc ='%1' ",K) et la boucle POUR et je vais tester |
| |
| |
| | | |
|
| | |
| |
Membro registado 841 mensagems Popularité : +19 (27 votes) |
|
Publicado em setembro, 25 2017 - 12:46 PM |
En fait je me suis rendu compte à posteriori que quelqu'un avait donné la même solution sur un post précédent
-- Cordialement, Camus |
| |
| |
| | | |
|
| | |
| |
Membro registado 493 mensagems Popularité : +24 (30 votes) |
|
Publicado em setembro, 25 2017 - 1:21 PM |
je pense qu'il y a moyen de serieusement optimiser ta requete en sql, tu est en quelle version de windev?
-- José |
| |
| |
| | | |
|
| | |
| |
Publicado em setembro, 25 2017 - 3:03 PM |
| |
| |
| | | |
|
| | |
| |
Membro registado 493 mensagems Popularité : +24 (30 votes) |
|
Publicado em setembro, 25 2017 - 3:18 PM |
il y a une date de facture dans ton fichier? quel appellation?
-- José |
| |
| |
| | | |
|
| | |
| |
Membro registado 493 mensagems Popularité : +24 (30 votes) |
|
Publicado em setembro, 25 2017 - 3:20 PM |
et a quoi correspond : FCommandes ?
-- José |
| |
| |
| | | |
|
| | |
| |
Membro registado 493 mensagems Popularité : +24 (30 votes) |
|
Publicado em setembro, 25 2017 - 4:12 PM |
dsl, bonjour aussi ^^
-- José |
| |
| |
| | | |
|
| | |
| |
Membro registado 493 mensagems Popularité : +24 (30 votes) |
|
Publicado em setembro, 27 2017 - 12:15 PM |
du coup, on dirait que t'es pas interessé?
-- José |
| |
| |
| | | |
|
| | | | |
| | |
|