je voudrais compter le nb de dossier par client ET le nb de dossier
spécifique par client
[code]
select CL.id_client,CL.cli_rs,
count(distinct D.id_dossier) as Total,sum(case D.code when 'A' then 1
when 'B' then 1 else 0 end) as ResultatAB,
sum(case D.code 'A' then 1 end) as ResultatA,
sum(case D.code when 'B' then 1 end) as ResultatB
from t_dossier D inner join t_facture F on D.id_dossier = F.id_dossier
inner join t_client CL on F.id_client = CL.id_client
where D.valider = 1
and D.date between "20090101" and "20091231"
and D.nature = "XXX"
and CL.id_client = "123"
[/code]
or si j'ai un dossier qui 2 Factures et 1 Avoir il me compte en double
les ResultatA ou ResultatB cela n'exclut pas les factures avec avoir
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Firetox
Bonjour,
de part le mcd il faut une union car sinon une jointure normale va multipliser les resultats en focntion du nombre de facture du client ce qui est normale
il faut une jointure sur dossier facture car (0,n) --> (1,1) et une autre sur facture et client qui a les memes cardinalités
ensuite sur cette union faire les sum qui donneront le bon resultats
bon dev @+
"JeAn-PhI" a écrit dans le message de news:4b66d93d$0$7039$
je voudrais compter le nb de dossier par client ET le nb de dossier spécifique par client
[code] select CL.id_client,CL.cli_rs, count(distinct D.id_dossier) as Total,sum(case D.code when 'A' then 1 when 'B' then 1 else 0 end) as ResultatAB, sum(case D.code 'A' then 1 end) as ResultatA, sum(case D.code when 'B' then 1 end) as ResultatB from t_dossier D inner join t_facture F on D.id_dossier = F.id_dossier inner join t_client CL on F.id_client = CL.id_client where D.valider = 1 and D.date between "20090101" and "20091231" and D.nature = "XXX" and CL.id_client = "123" [/code]
or si j'ai un dossier qui 2 Factures et 1 Avoir il me compte en double les ResultatA ou ResultatB cela n'exclut pas les factures avec avoir
comment puis je faire ?
merci
-- Cordialement JeAn-PhI
Bonjour,
de part le mcd il faut une union
car sinon une jointure normale va multipliser les resultats en focntion du
nombre de facture du client
ce qui est normale
il faut une jointure sur dossier facture car (0,n) --> (1,1)
et une autre sur facture et client qui a les memes cardinalités
ensuite sur cette union faire les sum qui donneront le bon resultats
bon dev
@+
"JeAn-PhI" <nospam@nospam.fr> a écrit dans le message de
news:4b66d93d$0$7039$426a74cc@news.free.fr...
je voudrais compter le nb de dossier par client ET le nb de dossier
spécifique par client
[code]
select CL.id_client,CL.cli_rs,
count(distinct D.id_dossier) as Total,sum(case D.code when 'A' then 1 when
'B' then 1 else 0 end) as ResultatAB,
sum(case D.code 'A' then 1 end) as ResultatA,
sum(case D.code when 'B' then 1 end) as ResultatB
from t_dossier D inner join t_facture F on D.id_dossier = F.id_dossier
inner join t_client CL on F.id_client = CL.id_client
where D.valider = 1
and D.date between "20090101" and "20091231"
and D.nature = "XXX"
and CL.id_client = "123"
[/code]
or si j'ai un dossier qui 2 Factures et 1 Avoir il me compte en double les
ResultatA ou ResultatB cela n'exclut pas les factures avec avoir
de part le mcd il faut une union car sinon une jointure normale va multipliser les resultats en focntion du nombre de facture du client ce qui est normale
il faut une jointure sur dossier facture car (0,n) --> (1,1) et une autre sur facture et client qui a les memes cardinalités
ensuite sur cette union faire les sum qui donneront le bon resultats
bon dev @+
"JeAn-PhI" a écrit dans le message de news:4b66d93d$0$7039$
je voudrais compter le nb de dossier par client ET le nb de dossier spécifique par client
[code] select CL.id_client,CL.cli_rs, count(distinct D.id_dossier) as Total,sum(case D.code when 'A' then 1 when 'B' then 1 else 0 end) as ResultatAB, sum(case D.code 'A' then 1 end) as ResultatA, sum(case D.code when 'B' then 1 end) as ResultatB from t_dossier D inner join t_facture F on D.id_dossier = F.id_dossier inner join t_client CL on F.id_client = CL.id_client where D.valider = 1 and D.date between "20090101" and "20091231" and D.nature = "XXX" and CL.id_client = "123" [/code]
or si j'ai un dossier qui 2 Factures et 1 Avoir il me compte en double les ResultatA ou ResultatB cela n'exclut pas les factures avec avoir
comment puis je faire ?
merci
-- Cordialement JeAn-PhI
JeAn-PhI
Le 01/02/2010, Firetox a supposé :
Bonjour,
de part le mcd il faut une union car sinon une jointure normale va multipliser les resultats en focntion du nombre de facture du client ce qui est normale
il faut une jointure sur dossier facture car (0,n) --> (1,1) et une autre sur facture et client qui a les memes cardinalités
ensuite sur cette union faire les sum qui donneront le bon resultats
bon dev @+
cette requête me donne le résultat attendu mais est ce qu'elle peut être encore optimisé ?
select sum(NbA+NbB)as ResultatAB,sum(NbA) as ResultatA,sum(NbB) as ResultatB,sum(NbT) as NbT from ( select count(distinct id_dossier) as NbA,0 as NbB,0 as NbT from t_dossier D inner join t_facture F on D.id_dossier = F.id_dossier inner join t_client CL on F.id_client = CL.id_client where D.valider = 1 and D.date between "20090101" and "20091231" and D.nature = "XXX" and CL.id_client = "123" and D.resultat = 'A' union select 0 as NbA,count(distinct id_dossier) as NbB,0 as NbT from t_dossier D inner join t_facture F on D.id_dossier = F.id_dossier inner join t_client CL on F.id_client = CL.id_client where D.valider = 1 and D.date between "20090101" and "20091231" and D.nature = "XXX" and CL.id_client = "123" and D.resultat = 'B' union select 0 as NbA,0 as NbB,count(distinct id_dossier) as NbT from t_dossier D inner join t_facture F on D.id_dossier = F.id_dossier inner join t_client CL on F.id_client = CL.id_client where D.valider = 1 and D.date between "20090101" and "20091231" and D.nature = "XXX" and CL.id_client = "123" ) as T
-- Cordialement JeAn-PhI
Le 01/02/2010, Firetox a supposé :
Bonjour,
de part le mcd il faut une union
car sinon une jointure normale va multipliser les resultats en focntion du
nombre de facture du client
ce qui est normale
il faut une jointure sur dossier facture car (0,n) --> (1,1)
et une autre sur facture et client qui a les memes cardinalités
ensuite sur cette union faire les sum qui donneront le bon resultats
bon dev
@+
cette requête me donne le résultat attendu mais est ce qu'elle peut
être encore optimisé ?
select sum(NbA+NbB)as ResultatAB,sum(NbA) as ResultatA,sum(NbB) as
ResultatB,sum(NbT) as NbT
from
(
select count(distinct id_dossier) as NbA,0 as NbB,0 as NbT
from t_dossier D inner join t_facture F on D.id_dossier = F.id_dossier
inner join t_client CL on F.id_client = CL.id_client
where D.valider = 1
and D.date between "20090101" and "20091231"
and D.nature = "XXX"
and CL.id_client = "123"
and D.resultat = 'A'
union
select 0 as NbA,count(distinct id_dossier) as NbB,0 as NbT
from t_dossier D inner join t_facture F on D.id_dossier = F.id_dossier
inner join t_client CL on F.id_client = CL.id_client
where D.valider = 1
and D.date between "20090101" and "20091231"
and D.nature = "XXX"
and CL.id_client = "123"
and D.resultat = 'B'
union
select 0 as NbA,0 as NbB,count(distinct id_dossier) as NbT
from t_dossier D inner join t_facture F on D.id_dossier = F.id_dossier
inner join t_client CL on F.id_client = CL.id_client
where D.valider = 1
and D.date between "20090101" and "20091231"
and D.nature = "XXX"
and CL.id_client = "123"
) as T
de part le mcd il faut une union car sinon une jointure normale va multipliser les resultats en focntion du nombre de facture du client ce qui est normale
il faut une jointure sur dossier facture car (0,n) --> (1,1) et une autre sur facture et client qui a les memes cardinalités
ensuite sur cette union faire les sum qui donneront le bon resultats
bon dev @+
cette requête me donne le résultat attendu mais est ce qu'elle peut être encore optimisé ?
select sum(NbA+NbB)as ResultatAB,sum(NbA) as ResultatA,sum(NbB) as ResultatB,sum(NbT) as NbT from ( select count(distinct id_dossier) as NbA,0 as NbB,0 as NbT from t_dossier D inner join t_facture F on D.id_dossier = F.id_dossier inner join t_client CL on F.id_client = CL.id_client where D.valider = 1 and D.date between "20090101" and "20091231" and D.nature = "XXX" and CL.id_client = "123" and D.resultat = 'A' union select 0 as NbA,count(distinct id_dossier) as NbB,0 as NbT from t_dossier D inner join t_facture F on D.id_dossier = F.id_dossier inner join t_client CL on F.id_client = CL.id_client where D.valider = 1 and D.date between "20090101" and "20091231" and D.nature = "XXX" and CL.id_client = "123" and D.resultat = 'B' union select 0 as NbA,0 as NbB,count(distinct id_dossier) as NbT from t_dossier D inner join t_facture F on D.id_dossier = F.id_dossier inner join t_client CL on F.id_client = CL.id_client where D.valider = 1 and D.date between "20090101" and "20091231" and D.nature = "XXX" and CL.id_client = "123" ) as T