JeAn-PhI avait écrit le 31/01/2007 :bonjour
voici le code sql d'une req :
[CUT]
pour elecoest -> renvoi le résultat que je souhaite avec une rapidité
phénoménale - de 1 sec (il me reste encore du chemin à faire en SQL)
pour Frederic -> idem
pour Pierre -> renvoi le bon résultat mais en + de 2 sec
pour abuser un peu est ce qu'il y aurait moyen d'optimiser celle ci :
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS Total
FROM T_FACTURE, T_CLIENT
WHERE T_CLIENT.CL_ID = T_FACTURE.CL_ID
AND T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
GROUP BY T_CLIENT.CL_ID, CL_RAISON_SOCIALE
union
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_AVOIR_FACTURE.TOTAL) AS Total
from T_AVOIR_FACTURE, T_CLIENT
where T_AVOIR_FACTURE.CL_ID = T_CLIENT.CL_ID
AND T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
group by T_CLIENT.CL_ID, CL_RAISON_SOCIALE
order by T_CLIENT.CL_RAISON_SOCIALE
le but étant d'avoir un liste qui contient 1 enreg pour un client avec la
somme des facture et ou 1 enreg pour le même client avec la somme des
avoirs
CLIENT1 SommeFacture
CLIENT1 SommeAvoir
CLIENT2 SommeFacture
CLIENT3 SommeAvoir
...
--
Cordialement JeAn-PhI
JeAn-PhI avait écrit le 31/01/2007 :
bonjour
voici le code sql d'une req :
[CUT]
pour elecoest -> renvoi le résultat que je souhaite avec une rapidité
phénoménale - de 1 sec (il me reste encore du chemin à faire en SQL)
pour Frederic -> idem
pour Pierre -> renvoi le bon résultat mais en + de 2 sec
pour abuser un peu est ce qu'il y aurait moyen d'optimiser celle ci :
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS Total
FROM T_FACTURE, T_CLIENT
WHERE T_CLIENT.CL_ID = T_FACTURE.CL_ID
AND T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
GROUP BY T_CLIENT.CL_ID, CL_RAISON_SOCIALE
union
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_AVOIR_FACTURE.TOTAL) AS Total
from T_AVOIR_FACTURE, T_CLIENT
where T_AVOIR_FACTURE.CL_ID = T_CLIENT.CL_ID
AND T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
group by T_CLIENT.CL_ID, CL_RAISON_SOCIALE
order by T_CLIENT.CL_RAISON_SOCIALE
le but étant d'avoir un liste qui contient 1 enreg pour un client avec la
somme des facture et ou 1 enreg pour le même client avec la somme des
avoirs
CLIENT1 SommeFacture
CLIENT1 SommeAvoir
CLIENT2 SommeFacture
CLIENT3 SommeAvoir
...
--
Cordialement JeAn-PhI
JeAn-PhI avait écrit le 31/01/2007 :bonjour
voici le code sql d'une req :
[CUT]
pour elecoest -> renvoi le résultat que je souhaite avec une rapidité
phénoménale - de 1 sec (il me reste encore du chemin à faire en SQL)
pour Frederic -> idem
pour Pierre -> renvoi le bon résultat mais en + de 2 sec
pour abuser un peu est ce qu'il y aurait moyen d'optimiser celle ci :
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS Total
FROM T_FACTURE, T_CLIENT
WHERE T_CLIENT.CL_ID = T_FACTURE.CL_ID
AND T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
GROUP BY T_CLIENT.CL_ID, CL_RAISON_SOCIALE
union
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_AVOIR_FACTURE.TOTAL) AS Total
from T_AVOIR_FACTURE, T_CLIENT
where T_AVOIR_FACTURE.CL_ID = T_CLIENT.CL_ID
AND T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
group by T_CLIENT.CL_ID, CL_RAISON_SOCIALE
order by T_CLIENT.CL_RAISON_SOCIALE
le but étant d'avoir un liste qui contient 1 enreg pour un client avec la
somme des facture et ou 1 enreg pour le même client avec la somme des
avoirs
CLIENT1 SommeFacture
CLIENT1 SommeAvoir
CLIENT2 SommeFacture
CLIENT3 SommeAvoir
...
--
Cordialement JeAn-PhI
JeAn-PhI avait écrit le 31/01/2007 :bonjour
voici le code sql d'une req :
[CUT]
pour elecoest -> renvoi le résultat que je souhaite avec une rapidité
phénoménale - de 1 sec (il me reste encore du chemin à faire en SQL)
pour Frederic -> idem
pour Pierre -> renvoi le bon résultat mais en + de 2 sec
pour abuser un peu est ce qu'il y aurait moyen d'optimiser celle ci :
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS Total
FROM T_FACTURE, T_CLIENT
WHERE T_CLIENT.CL_ID = T_FACTURE.CL_ID
AND T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
GROUP BY T_CLIENT.CL_ID, CL_RAISON_SOCIALE
union
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_AVOIR_FACTURE.TOTAL) AS Total
from T_AVOIR_FACTURE, T_CLIENT
where T_AVOIR_FACTURE.CL_ID = T_CLIENT.CL_ID
AND T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
group by T_CLIENT.CL_ID, CL_RAISON_SOCIALE
order by T_CLIENT.CL_RAISON_SOCIALE
le but étant d'avoir un liste qui contient 1 enreg pour un client avec la
somme des facture et ou 1 enreg pour le même client avec la somme des avoirs
CLIENT1 SommeFacture
CLIENT1 SommeAvoir
CLIENT2 SommeFacture
CLIENT3 SommeAvoir
...
JeAn-PhI avait écrit le 31/01/2007 :
bonjour
voici le code sql d'une req :
[CUT]
pour elecoest -> renvoi le résultat que je souhaite avec une rapidité
phénoménale - de 1 sec (il me reste encore du chemin à faire en SQL)
pour Frederic -> idem
pour Pierre -> renvoi le bon résultat mais en + de 2 sec
pour abuser un peu est ce qu'il y aurait moyen d'optimiser celle ci :
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS Total
FROM T_FACTURE, T_CLIENT
WHERE T_CLIENT.CL_ID = T_FACTURE.CL_ID
AND T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
GROUP BY T_CLIENT.CL_ID, CL_RAISON_SOCIALE
union
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_AVOIR_FACTURE.TOTAL) AS Total
from T_AVOIR_FACTURE, T_CLIENT
where T_AVOIR_FACTURE.CL_ID = T_CLIENT.CL_ID
AND T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
group by T_CLIENT.CL_ID, CL_RAISON_SOCIALE
order by T_CLIENT.CL_RAISON_SOCIALE
le but étant d'avoir un liste qui contient 1 enreg pour un client avec la
somme des facture et ou 1 enreg pour le même client avec la somme des avoirs
CLIENT1 SommeFacture
CLIENT1 SommeAvoir
CLIENT2 SommeFacture
CLIENT3 SommeAvoir
...
JeAn-PhI avait écrit le 31/01/2007 :bonjour
voici le code sql d'une req :
[CUT]
pour elecoest -> renvoi le résultat que je souhaite avec une rapidité
phénoménale - de 1 sec (il me reste encore du chemin à faire en SQL)
pour Frederic -> idem
pour Pierre -> renvoi le bon résultat mais en + de 2 sec
pour abuser un peu est ce qu'il y aurait moyen d'optimiser celle ci :
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS Total
FROM T_FACTURE, T_CLIENT
WHERE T_CLIENT.CL_ID = T_FACTURE.CL_ID
AND T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
GROUP BY T_CLIENT.CL_ID, CL_RAISON_SOCIALE
union
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_AVOIR_FACTURE.TOTAL) AS Total
from T_AVOIR_FACTURE, T_CLIENT
where T_AVOIR_FACTURE.CL_ID = T_CLIENT.CL_ID
AND T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
group by T_CLIENT.CL_ID, CL_RAISON_SOCIALE
order by T_CLIENT.CL_RAISON_SOCIALE
le but étant d'avoir un liste qui contient 1 enreg pour un client avec la
somme des facture et ou 1 enreg pour le même client avec la somme des avoirs
CLIENT1 SommeFacture
CLIENT1 SommeAvoir
CLIENT2 SommeFacture
CLIENT3 SommeAvoir
...
Bonsoir
pourquoi ne pas faire cela :
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS Total facture,
SUM(T_AVOIR_FACTURE.TOTAL) AS TotalAvoir
FROM T_CLIENT
LEFT JOIN T_FACTURE ON T_CLIENT.CL_ID = T_FACTURE.CL_ID
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
LEFT JOIN T_AVOIR_FACTURE ON T_AVOIR_FACTURE.CL_ID = T_CLIENT.CL_ID
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
WHERE T_T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
AND (T_FACTURE.CL_ID is not null or T_AVOIR_FACTURE.CL_ID is not null)
GROUP BY T_CLIENT.CL_ID, CL_RAISON_SOCIALE
order by T_CLIENT.CL_RAISON_SOCIALE
le but étant d'avoir un liste qui contient 1 enreg pour un client avec
la somme des facture et ou 1 enreg pour le même client avec la somme
des avoirs
CLIENT1 SommeFacture SommeAvoir
CLIENT2 SommeFacture SommeAvoir
CLIENT3 SommeFacture SommeAvoir
les sommes sont soit >0 toutes les deux soit une seule
on enleve les clients qui non rien
mais on a une ligne par client
maintenant si tu veux vraiement ton resultat sur une ligne fac et une ligne
avoir
Bonsoir
pourquoi ne pas faire cela :
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS Total facture,
SUM(T_AVOIR_FACTURE.TOTAL) AS TotalAvoir
FROM T_CLIENT
LEFT JOIN T_FACTURE ON T_CLIENT.CL_ID = T_FACTURE.CL_ID
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
LEFT JOIN T_AVOIR_FACTURE ON T_AVOIR_FACTURE.CL_ID = T_CLIENT.CL_ID
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
WHERE T_T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
AND (T_FACTURE.CL_ID is not null or T_AVOIR_FACTURE.CL_ID is not null)
GROUP BY T_CLIENT.CL_ID, CL_RAISON_SOCIALE
order by T_CLIENT.CL_RAISON_SOCIALE
le but étant d'avoir un liste qui contient 1 enreg pour un client avec
la somme des facture et ou 1 enreg pour le même client avec la somme
des avoirs
CLIENT1 SommeFacture SommeAvoir
CLIENT2 SommeFacture SommeAvoir
CLIENT3 SommeFacture SommeAvoir
les sommes sont soit >0 toutes les deux soit une seule
on enleve les clients qui non rien
mais on a une ligne par client
maintenant si tu veux vraiement ton resultat sur une ligne fac et une ligne
avoir
Bonsoir
pourquoi ne pas faire cela :
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS Total facture,
SUM(T_AVOIR_FACTURE.TOTAL) AS TotalAvoir
FROM T_CLIENT
LEFT JOIN T_FACTURE ON T_CLIENT.CL_ID = T_FACTURE.CL_ID
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
LEFT JOIN T_AVOIR_FACTURE ON T_AVOIR_FACTURE.CL_ID = T_CLIENT.CL_ID
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
WHERE T_T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
AND (T_FACTURE.CL_ID is not null or T_AVOIR_FACTURE.CL_ID is not null)
GROUP BY T_CLIENT.CL_ID, CL_RAISON_SOCIALE
order by T_CLIENT.CL_RAISON_SOCIALE
le but étant d'avoir un liste qui contient 1 enreg pour un client avec
la somme des facture et ou 1 enreg pour le même client avec la somme
des avoirs
CLIENT1 SommeFacture SommeAvoir
CLIENT2 SommeFacture SommeAvoir
CLIENT3 SommeFacture SommeAvoir
les sommes sont soit >0 toutes les deux soit une seule
on enleve les clients qui non rien
mais on a une ligne par client
maintenant si tu veux vraiement ton resultat sur une ligne fac et une ligne
avoir
Emprin, Frederic a formulé la demande :Bonsoir
pourquoi ne pas faire cela :
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS Total facture,
SUM(T_AVOIR_FACTURE.TOTAL) AS TotalAvoir
FROM T_CLIENT
LEFT JOIN T_FACTURE ON T_CLIENT.CL_ID = T_FACTURE.CL_ID
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
LEFT JOIN T_AVOIR_FACTURE ON T_AVOIR_FACTURE.CL_ID = T_CLIENT.CL_ID
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
WHERE T_T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
AND (T_FACTURE.CL_ID is not null or T_AVOIR_FACTURE.CL_ID is not null)
GROUP BY T_CLIENT.CL_ID, CL_RAISON_SOCIALE
order by T_CLIENT.CL_RAISON_SOCIALE
le but étant d'avoir un liste qui contient 1 enreg pour un client avec
la somme des facture et ou 1 enreg pour le même client avec la somme
des avoirs
CLIENT1 SommeFacture SommeAvoir
CLIENT2 SommeFacture SommeAvoir
CLIENT3 SommeFacture SommeAvoir
les sommes sont soit >0 toutes les deux soit une seule
on enleve les clients qui non rien
mais on a une ligne par client
maintenant si tu veux vraiement ton resultat sur une ligne fac et une
ligne avoir
[CUT]
je me suis réjouit trop vite les cumuls ne sont pas bon
après verif directement dans le fichier la somme des factures pour
plusieurs client est incohérente je cherche à comprendre
--
Cordialement JeAn-PhI
Emprin, Frederic a formulé la demande :
Bonsoir
pourquoi ne pas faire cela :
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS Total facture,
SUM(T_AVOIR_FACTURE.TOTAL) AS TotalAvoir
FROM T_CLIENT
LEFT JOIN T_FACTURE ON T_CLIENT.CL_ID = T_FACTURE.CL_ID
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
LEFT JOIN T_AVOIR_FACTURE ON T_AVOIR_FACTURE.CL_ID = T_CLIENT.CL_ID
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
WHERE T_T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
AND (T_FACTURE.CL_ID is not null or T_AVOIR_FACTURE.CL_ID is not null)
GROUP BY T_CLIENT.CL_ID, CL_RAISON_SOCIALE
order by T_CLIENT.CL_RAISON_SOCIALE
le but étant d'avoir un liste qui contient 1 enreg pour un client avec
la somme des facture et ou 1 enreg pour le même client avec la somme
des avoirs
CLIENT1 SommeFacture SommeAvoir
CLIENT2 SommeFacture SommeAvoir
CLIENT3 SommeFacture SommeAvoir
les sommes sont soit >0 toutes les deux soit une seule
on enleve les clients qui non rien
mais on a une ligne par client
maintenant si tu veux vraiement ton resultat sur une ligne fac et une
ligne avoir
[CUT]
je me suis réjouit trop vite les cumuls ne sont pas bon
après verif directement dans le fichier la somme des factures pour
plusieurs client est incohérente je cherche à comprendre
--
Cordialement JeAn-PhI
Emprin, Frederic a formulé la demande :Bonsoir
pourquoi ne pas faire cela :
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS Total facture,
SUM(T_AVOIR_FACTURE.TOTAL) AS TotalAvoir
FROM T_CLIENT
LEFT JOIN T_FACTURE ON T_CLIENT.CL_ID = T_FACTURE.CL_ID
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
LEFT JOIN T_AVOIR_FACTURE ON T_AVOIR_FACTURE.CL_ID = T_CLIENT.CL_ID
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
WHERE T_T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
AND (T_FACTURE.CL_ID is not null or T_AVOIR_FACTURE.CL_ID is not null)
GROUP BY T_CLIENT.CL_ID, CL_RAISON_SOCIALE
order by T_CLIENT.CL_RAISON_SOCIALE
le but étant d'avoir un liste qui contient 1 enreg pour un client avec
la somme des facture et ou 1 enreg pour le même client avec la somme
des avoirs
CLIENT1 SommeFacture SommeAvoir
CLIENT2 SommeFacture SommeAvoir
CLIENT3 SommeFacture SommeAvoir
les sommes sont soit >0 toutes les deux soit une seule
on enleve les clients qui non rien
mais on a une ligne par client
maintenant si tu veux vraiement ton resultat sur une ligne fac et une
ligne avoir
[CUT]
je me suis réjouit trop vite les cumuls ne sont pas bon
après verif directement dans le fichier la somme des factures pour
plusieurs client est incohérente je cherche à comprendre
--
Cordialement JeAn-PhI
Bonjour,
attention ans ce style e requette il faut faire attention
car je ne sais pas comment le moteur fait quand dans les somme il y a un
null
sur certain moteur l on met ifnull(macolonne,0) pour eviter les problemes
cela depend donc du moteur de base
"JeAn-PhI" a écrit dans le message de news:Emprin, Frederic a formulé la demande :Bonsoir
pourquoi ne pas faire cela :
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS Total facture,
SUM(T_AVOIR_FACTURE.TOTAL) AS TotalAvoir
FROM T_CLIENT
LEFT JOIN T_FACTURE ON T_CLIENT.CL_ID = T_FACTURE.CL_ID
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
LEFT JOIN T_AVOIR_FACTURE ON T_AVOIR_FACTURE.CL_ID = T_CLIENT.CL_ID
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
WHERE T_T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
AND (T_FACTURE.CL_ID is not null or T_AVOIR_FACTURE.CL_ID is not null)
GROUP BY T_CLIENT.CL_ID, CL_RAISON_SOCIALE
order by T_CLIENT.CL_RAISON_SOCIALE
le but étant d'avoir un liste qui contient 1 enreg pour un client avec
la somme des facture et ou 1 enreg pour le même client avec la somme
des avoirs
CLIENT1 SommeFacture SommeAvoir
CLIENT2 SommeFacture SommeAvoir
CLIENT3 SommeFacture SommeAvoir
les sommes sont soit >0 toutes les deux soit une seule
on enleve les clients qui non rien
mais on a une ligne par client
maintenant si tu veux vraiement ton resultat sur une ligne fac et une
ligne avoir
[CUT]
je me suis réjouit trop vite les cumuls ne sont pas bon
après verif directement dans le fichier la somme des factures pour
plusieurs client est incohérente je cherche à comprendre
--
Cordialement JeAn-PhI
Bonjour,
attention ans ce style e requette il faut faire attention
car je ne sais pas comment le moteur fait quand dans les somme il y a un
null
sur certain moteur l on met ifnull(macolonne,0) pour eviter les problemes
cela depend donc du moteur de base
"JeAn-PhI" <no.spam@spam.fr> a écrit dans le message de news:
mn.0c2c7d726b16d7b2.49289@spam.fr...
Emprin, Frederic a formulé la demande :
Bonsoir
pourquoi ne pas faire cela :
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS Total facture,
SUM(T_AVOIR_FACTURE.TOTAL) AS TotalAvoir
FROM T_CLIENT
LEFT JOIN T_FACTURE ON T_CLIENT.CL_ID = T_FACTURE.CL_ID
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
LEFT JOIN T_AVOIR_FACTURE ON T_AVOIR_FACTURE.CL_ID = T_CLIENT.CL_ID
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
WHERE T_T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
AND (T_FACTURE.CL_ID is not null or T_AVOIR_FACTURE.CL_ID is not null)
GROUP BY T_CLIENT.CL_ID, CL_RAISON_SOCIALE
order by T_CLIENT.CL_RAISON_SOCIALE
le but étant d'avoir un liste qui contient 1 enreg pour un client avec
la somme des facture et ou 1 enreg pour le même client avec la somme
des avoirs
CLIENT1 SommeFacture SommeAvoir
CLIENT2 SommeFacture SommeAvoir
CLIENT3 SommeFacture SommeAvoir
les sommes sont soit >0 toutes les deux soit une seule
on enleve les clients qui non rien
mais on a une ligne par client
maintenant si tu veux vraiement ton resultat sur une ligne fac et une
ligne avoir
[CUT]
je me suis réjouit trop vite les cumuls ne sont pas bon
après verif directement dans le fichier la somme des factures pour
plusieurs client est incohérente je cherche à comprendre
--
Cordialement JeAn-PhI
Bonjour,
attention ans ce style e requette il faut faire attention
car je ne sais pas comment le moteur fait quand dans les somme il y a un
null
sur certain moteur l on met ifnull(macolonne,0) pour eviter les problemes
cela depend donc du moteur de base
"JeAn-PhI" a écrit dans le message de news:Emprin, Frederic a formulé la demande :Bonsoir
pourquoi ne pas faire cela :
SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS Total facture,
SUM(T_AVOIR_FACTURE.TOTAL) AS TotalAvoir
FROM T_CLIENT
LEFT JOIN T_FACTURE ON T_CLIENT.CL_ID = T_FACTURE.CL_ID
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
LEFT JOIN T_AVOIR_FACTURE ON T_AVOIR_FACTURE.CL_ID = T_CLIENT.CL_ID
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
WHERE T_T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
AND (T_FACTURE.CL_ID is not null or T_AVOIR_FACTURE.CL_ID is not null)
GROUP BY T_CLIENT.CL_ID, CL_RAISON_SOCIALE
order by T_CLIENT.CL_RAISON_SOCIALE
le but étant d'avoir un liste qui contient 1 enreg pour un client avec
la somme des facture et ou 1 enreg pour le même client avec la somme
des avoirs
CLIENT1 SommeFacture SommeAvoir
CLIENT2 SommeFacture SommeAvoir
CLIENT3 SommeFacture SommeAvoir
les sommes sont soit >0 toutes les deux soit une seule
on enleve les clients qui non rien
mais on a une ligne par client
maintenant si tu veux vraiement ton resultat sur une ligne fac et une
ligne avoir
[CUT]
je me suis réjouit trop vite les cumuls ne sont pas bon
après verif directement dans le fichier la somme des factures pour
plusieurs client est incohérente je cherche à comprendre
--
Cordialement JeAn-PhI
mais le plus simple reste l'union et pour avoir tout sur une ligne mettre
cette union en jointure sur 2 requetes
(en fait utiliser chaque jointure comme une table et joindre les deux)
voila
mais le plus simple reste l'union et pour avoir tout sur une ligne mettre
cette union en jointure sur 2 requetes
(en fait utiliser chaque jointure comme une table et joindre les deux)
voila
mais le plus simple reste l'union et pour avoir tout sur une ligne mettre
cette union en jointure sur 2 requetes
(en fait utiliser chaque jointure comme une table et joindre les deux)
voila
Emprin, Frederic a formulé la demande :
[CUT]
mais le plus simple reste l'union et pour avoir tout sur une ligne mettre
cette union en jointure sur 2 requetes
(en fait utiliser chaque jointure comme une table et joindre les deux)
voila
[CUT]
un petit exemple pour mieux comprendre svp
--
Cordialement JeAn-PhI
Emprin, Frederic a formulé la demande :
[CUT]
mais le plus simple reste l'union et pour avoir tout sur une ligne mettre
cette union en jointure sur 2 requetes
(en fait utiliser chaque jointure comme une table et joindre les deux)
voila
[CUT]
un petit exemple pour mieux comprendre svp
--
Cordialement JeAn-PhI
Emprin, Frederic a formulé la demande :
[CUT]
mais le plus simple reste l'union et pour avoir tout sur une ligne mettre
cette union en jointure sur 2 requetes
(en fait utiliser chaque jointure comme une table et joindre les deux)
voila
[CUT]
un petit exemple pour mieux comprendre svp
--
Cordialement JeAn-PhI
Bonjour,
bon voici un exemple mais a condition que le moteur de base comme oracle ou
sqlserveur, mysql
accepte les sous requetes. averifier mais par experience je dirait qu'entre
l'union et cette requete le temps est presque identique. l'avantage est
d'avoir le resultat sur 1 seule ligne pour chaque client
Bonjour,
bon voici un exemple mais a condition que le moteur de base comme oracle ou
sqlserveur, mysql
accepte les sous requetes. averifier mais par experience je dirait qu'entre
l'union et cette requete le temps est presque identique. l'avantage est
d'avoir le resultat sur 1 seule ligne pour chaque client
Bonjour,
bon voici un exemple mais a condition que le moteur de base comme oracle ou
sqlserveur, mysql
accepte les sous requetes. averifier mais par experience je dirait qu'entre
l'union et cette requete le temps est presque identique. l'avantage est
d'avoir le resultat sur 1 seule ligne pour chaque client
Emprin, Frederic a couché sur son écran :Bonjour,
bon voici un exemple mais a condition que le moteur de base comme oracle
ou sqlserveur, mysql
accepte les sous requetes. averifier mais par experience je dirait
qu'entre l'union et cette requete le temps est presque identique.
l'avantage est d'avoir le resultat sur 1 seule ligne pour chaque client
[CUT]
après correction et modif pour adapter au moteur HF voici ce que ca donne
:
SELECT TABLE1.CL_ID as CL_ID,
TABLE1.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(TABLE1.TotalFacture) AS TotalFacture,
SUM(TABLE2.TotalAvoir) AS TotalAvoir
FROM (SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS TotalFacture
FROM T_CLIENT LEFT JOIN T_FACTURE ON T_CLIENT.CL_ID = T_FACTURE.CL_ID
WHERE T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
AND (T_FACTURE.CL_ID is not null)
GROUP BY CL_ID,CL_RAISON_SOCIALE) AS TABLE1
LEFT JOIN
(SELECT T_CLIENT.CL_ID as CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_AVOIR_FACTURE.TOTAL) AS TotalAvoir
FROM T_CLIENT LEFT JOIN T_AVOIR_FACTURE ON T_AVOIR_FACTURE.CL_ID =
T_CLIENT.CL_ID
WHERE T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
AND (T_AVOIR_FACTURE.CL_ID is not null)
GROUP BY CL_ID,CL_RAISON_SOCIALE) AS TABLE2
ON TABLE1.CL_ID = TABLE2.CL_ID
GROUP BY CL_ID,CL_RAISON_SOCIALE
ORDER BY CL_RAISON_SOCIALE
j'ai mis le test de la date dans la close WHERE car dans le LEFT JOIN cela
ne fonctionne pas dans ce cas
remarque :
le test de la date dans la close WHERE est plus rapide que dans le LEFT
JOIN
remarque 2 :
SELECT T_CLIENT.CL_ID AS CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS Total
FROM T_CLIENT LEFT JOIN T_FACTURE ON T_CLIENT.CL_ID = T_FACTURE.CL_ID
WHERE T_CLIENT.CL_RAISON_SOCIALE LIKE %{pClientRS}%
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
AND (T_FACTURE.CL_ID IS NOT NULL)
GROUP BY CL_ID, CL_RAISON_SOCIALE
UNION ALL
SELECT T_CLIENT.CL_ID AS CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_AVOIR_FACTURE.TOTAL) AS Total
FROM T_CLIENT LEFT JOIN T_AVOIR_FACTURE on T_CLIENT.CL_ID =
T_AVOIR_FACTURE.CL_ID
WHERE T_CLIENT.CL_RAISON_SOCIALE LIKE %{pClientRS}%
AND T_AVOIR_FACTURE.AF_DATE BETWEEN {pDateDeb} AND {pDateFin}
AND (T_AVOIR_FACTURE.CL_ID IS NOT NULL)
GROUP BY CL_ID, CL_RAISON_SOCIALE
ORDER BY CL_RAISON_SOCIALE
celle ci mais 3 sec pour remonter 3584 enreg contre plus de 20 sec pour
1792 enreg (NB : le test de la raison sociale est contient dans les 2 cas
et non commence)
--
Cordialement JeAn-PhI
Emprin, Frederic a couché sur son écran :
Bonjour,
bon voici un exemple mais a condition que le moteur de base comme oracle
ou sqlserveur, mysql
accepte les sous requetes. averifier mais par experience je dirait
qu'entre l'union et cette requete le temps est presque identique.
l'avantage est d'avoir le resultat sur 1 seule ligne pour chaque client
[CUT]
après correction et modif pour adapter au moteur HF voici ce que ca donne
:
SELECT TABLE1.CL_ID as CL_ID,
TABLE1.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(TABLE1.TotalFacture) AS TotalFacture,
SUM(TABLE2.TotalAvoir) AS TotalAvoir
FROM (SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS TotalFacture
FROM T_CLIENT LEFT JOIN T_FACTURE ON T_CLIENT.CL_ID = T_FACTURE.CL_ID
WHERE T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
AND (T_FACTURE.CL_ID is not null)
GROUP BY CL_ID,CL_RAISON_SOCIALE) AS TABLE1
LEFT JOIN
(SELECT T_CLIENT.CL_ID as CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_AVOIR_FACTURE.TOTAL) AS TotalAvoir
FROM T_CLIENT LEFT JOIN T_AVOIR_FACTURE ON T_AVOIR_FACTURE.CL_ID =
T_CLIENT.CL_ID
WHERE T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
AND (T_AVOIR_FACTURE.CL_ID is not null)
GROUP BY CL_ID,CL_RAISON_SOCIALE) AS TABLE2
ON TABLE1.CL_ID = TABLE2.CL_ID
GROUP BY CL_ID,CL_RAISON_SOCIALE
ORDER BY CL_RAISON_SOCIALE
j'ai mis le test de la date dans la close WHERE car dans le LEFT JOIN cela
ne fonctionne pas dans ce cas
remarque :
le test de la date dans la close WHERE est plus rapide que dans le LEFT
JOIN
remarque 2 :
SELECT T_CLIENT.CL_ID AS CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS Total
FROM T_CLIENT LEFT JOIN T_FACTURE ON T_CLIENT.CL_ID = T_FACTURE.CL_ID
WHERE T_CLIENT.CL_RAISON_SOCIALE LIKE %{pClientRS}%
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
AND (T_FACTURE.CL_ID IS NOT NULL)
GROUP BY CL_ID, CL_RAISON_SOCIALE
UNION ALL
SELECT T_CLIENT.CL_ID AS CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_AVOIR_FACTURE.TOTAL) AS Total
FROM T_CLIENT LEFT JOIN T_AVOIR_FACTURE on T_CLIENT.CL_ID =
T_AVOIR_FACTURE.CL_ID
WHERE T_CLIENT.CL_RAISON_SOCIALE LIKE %{pClientRS}%
AND T_AVOIR_FACTURE.AF_DATE BETWEEN {pDateDeb} AND {pDateFin}
AND (T_AVOIR_FACTURE.CL_ID IS NOT NULL)
GROUP BY CL_ID, CL_RAISON_SOCIALE
ORDER BY CL_RAISON_SOCIALE
celle ci mais 3 sec pour remonter 3584 enreg contre plus de 20 sec pour
1792 enreg (NB : le test de la raison sociale est contient dans les 2 cas
et non commence)
--
Cordialement JeAn-PhI
Emprin, Frederic a couché sur son écran :Bonjour,
bon voici un exemple mais a condition que le moteur de base comme oracle
ou sqlserveur, mysql
accepte les sous requetes. averifier mais par experience je dirait
qu'entre l'union et cette requete le temps est presque identique.
l'avantage est d'avoir le resultat sur 1 seule ligne pour chaque client
[CUT]
après correction et modif pour adapter au moteur HF voici ce que ca donne
:
SELECT TABLE1.CL_ID as CL_ID,
TABLE1.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(TABLE1.TotalFacture) AS TotalFacture,
SUM(TABLE2.TotalAvoir) AS TotalAvoir
FROM (SELECT T_CLIENT.CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS TotalFacture
FROM T_CLIENT LEFT JOIN T_FACTURE ON T_CLIENT.CL_ID = T_FACTURE.CL_ID
WHERE T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
AND (T_FACTURE.CL_ID is not null)
GROUP BY CL_ID,CL_RAISON_SOCIALE) AS TABLE1
LEFT JOIN
(SELECT T_CLIENT.CL_ID as CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_AVOIR_FACTURE.TOTAL) AS TotalAvoir
FROM T_CLIENT LEFT JOIN T_AVOIR_FACTURE ON T_AVOIR_FACTURE.CL_ID =
T_CLIENT.CL_ID
WHERE T_CLIENT.CL_RAISON_SOCIALE LIKE {pClientRS}%
and T_AVOIR_FACTURE.AF_DATE between {pDateDeb} AND {pDateFin}
AND (T_AVOIR_FACTURE.CL_ID is not null)
GROUP BY CL_ID,CL_RAISON_SOCIALE) AS TABLE2
ON TABLE1.CL_ID = TABLE2.CL_ID
GROUP BY CL_ID,CL_RAISON_SOCIALE
ORDER BY CL_RAISON_SOCIALE
j'ai mis le test de la date dans la close WHERE car dans le LEFT JOIN cela
ne fonctionne pas dans ce cas
remarque :
le test de la date dans la close WHERE est plus rapide que dans le LEFT
JOIN
remarque 2 :
SELECT T_CLIENT.CL_ID AS CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_FACTURE.TOTAL) AS Total
FROM T_CLIENT LEFT JOIN T_FACTURE ON T_CLIENT.CL_ID = T_FACTURE.CL_ID
WHERE T_CLIENT.CL_RAISON_SOCIALE LIKE %{pClientRS}%
AND T_FACTURE.FA_DATE BETWEEN {pDateDeb} AND {pDateFin}
AND (T_FACTURE.CL_ID IS NOT NULL)
GROUP BY CL_ID, CL_RAISON_SOCIALE
UNION ALL
SELECT T_CLIENT.CL_ID AS CL_ID,
T_CLIENT.CL_RAISON_SOCIALE AS CL_RAISON_SOCIALE,
SUM(T_AVOIR_FACTURE.TOTAL) AS Total
FROM T_CLIENT LEFT JOIN T_AVOIR_FACTURE on T_CLIENT.CL_ID =
T_AVOIR_FACTURE.CL_ID
WHERE T_CLIENT.CL_RAISON_SOCIALE LIKE %{pClientRS}%
AND T_AVOIR_FACTURE.AF_DATE BETWEEN {pDateDeb} AND {pDateFin}
AND (T_AVOIR_FACTURE.CL_ID IS NOT NULL)
GROUP BY CL_ID, CL_RAISON_SOCIALE
ORDER BY CL_RAISON_SOCIALE
celle ci mais 3 sec pour remonter 3584 enreg contre plus de 20 sec pour
1792 enreg (NB : le test de la raison sociale est contient dans les 2 cas
et non commence)
--
Cordialement JeAn-PhI