Bonjour,
je dois faire une stat sur une base existante. En gros, on veut obtenir le
CA HT par vendeur et par famille de produits, à partir des factures, pour
une période donnée.
Jusque là, c'est facile et j'obtiens ce que je veux.
Sauf que dans la base, il y a une table pour les factures, et une table pour
les avoirs (!!), avec bien sur, les tables lignes détail pour chacune.
Sachant que la requète sur les tables factures et lignes de factures donne
ça :
select client.refcli, client.nom, famart.codfa,
famart.libelle, round(sum(ligfctc.qte*ligfctc.pxvtht),2) as 'CA HT' from
client
inner join fctcli on fctcli.refcli = client.refcli
inner join ligfctc on ligfctc.id_fctcli = fctcli.id_fctcli
inner join famart on ligfctc.codfa = famart.codfa
where fctcli.datfct between '20090801' and '20090831'
and client.refcli = '000103'
group by codfa, client.refcli;
Comment ajouter une colonne RETOUR HT ?
Mes essais dans ce sens ne fonctionnent pas, car, si je fais un join des
avoirs et lignes avoir :
la requète suivante mélange tout.
select client.refcli, client.nom, famart.codfa,
famart.libelle, round(sum(ligfctc.qte*ligfctc.pxvtht),2) as 'CA HT' from
client
inner join fctcli on fctcli.refcli = client.refcli
inner join ligfctc on ligfctc.id_fctcli = fctcli.id_fctcli
inner join avcli on avcli.refcli = client.refcli
inner join ligavc on ligavc.id_avcli = avcli.id_avcli
inner join famart on ligfctc.codfa = famart.codfa
where fctcli.datfct between '20090801' and '20090831'
or avcli.datfct between '20090801' and '20090831'
and client.refcli = '000103'
group by codfa, client.refcli;
y a-t-il un moyen, ou dois-je passer par une vue ?
Merci
--
Jacques TREPP
Albypam
3, rue Jean Mermoz
81160 - ST Juery
__________ Information provenant d'ESET NOD32 Antivirus, version de la base des signatures de virus 4436 (20090918) __________
Le message a été vérifié par ESET NOD32 Antivirus.
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 jacques
une union sur les 2 requetes avec un select global pour faire les sum et avoir une seule ligne par client par contre dans chaque requete de l'union il faut ajouter la colonne de l'autre requete et tu fait un select sur le resultat
TMPTable.refcli, TMPTable.nom, TMPTable.codfa, TMPTable.libelle, round(sum(TMPtable.CA),2) as 'CA HT' round(sum(TMPTable.RETOUR),2) as 'RETOUR HT'
FROM (
select client.refcli, client.nom, famart.codfa, famart.libelle, ligfctc.qte*ligfctc.pxvtht as 'CA, 0 as 'RETOUR' from client inner join fctcli on fctcli.refcli = client.refcli inner join ligfctc on ligfctc.id_fctcli = fctcli.id_fctcli inner join famart on ligfctc.codfa = famart.codfa
where fctcli.datfct between '20090801' and '20090831' and client.refcli = '000103'
UNION
select client.refcli, client.nom, famart.codfa, famart.libelle, 0 as 'CA' , ligavc.qte*ligavc.pxvtht as 'RETOUR' from client inner join avcli on avcli .refcli = client.refcli inner join ligavc on ligavc.id_avcli = avcli.id_avcli
where avcli.datfct between '20090801' and '20090831' and client.refcli = '000103') AS TMPTable
GROUP By codfa, client.refcli;
"jacques Trepp" a écrit dans le message de news:4ab38903$0$410$
Bonjour, je dois faire une stat sur une base existante. En gros, on veut obtenir le CA HT par vendeur et par famille de produits, à partir des factures, pour une période donnée. Jusque là, c'est facile et j'obtiens ce que je veux. Sauf que dans la base, il y a une table pour les factures, et une table pour les avoirs (!!), avec bien sur, les tables lignes détail pour chacune.
Sachant que la requète sur les tables factures et lignes de factures donne ça :
select client.refcli, client.nom, famart.codfa, famart.libelle, round(sum(ligfctc.qte*ligfctc.pxvtht),2) as 'CA HT' from client
inner join fctcli on fctcli.refcli = client.refcli inner join ligfctc on ligfctc.id_fctcli = fctcli.id_fctcli
inner join famart on ligfctc.codfa = famart.codfa where fctcli.datfct between '20090801' and '20090831'
and client.refcli = '000103' group by codfa, client.refcli;
Comment ajouter une colonne RETOUR HT ? Mes essais dans ce sens ne fonctionnent pas, car, si je fais un join des avoirs et lignes avoir :
la requète suivante mélange tout.
select client.refcli, client.nom, famart.codfa, famart.libelle, round(sum(ligfctc.qte*ligfctc.pxvtht),2) as 'CA HT' from client
inner join fctcli on fctcli.refcli = client.refcli inner join ligfctc on ligfctc.id_fctcli = fctcli.id_fctcli
inner join avcli on avcli.refcli = client.refcli inner join ligavc on ligavc.id_avcli = avcli.id_avcli
inner join famart on ligfctc.codfa = famart.codfa where fctcli.datfct between '20090801' and '20090831' or avcli.datfct between '20090801' and '20090831'
and client.refcli = '000103'
group by codfa, client.refcli;
y a-t-il un moyen, ou dois-je passer par une vue ?
Merci
-- Jacques TREPP Albypam 3, rue Jean Mermoz 81160 - ST Juery
__________ Information provenant d'ESET NOD32 Antivirus, version de la base des signatures de virus 4436 (20090918) __________
Le message a été vérifié par ESET NOD32 Antivirus.
http://www.eset.com
Bonjour jacques
une union sur les 2 requetes avec un select global pour faire les sum et
avoir une seule ligne par client
par contre dans chaque requete de l'union il faut ajouter la colonne de
l'autre requete et tu fait un select sur le resultat
TMPTable.refcli, TMPTable.nom, TMPTable.codfa,
TMPTable.libelle,
round(sum(TMPtable.CA),2) as 'CA HT'
round(sum(TMPTable.RETOUR),2) as 'RETOUR HT'
FROM (
select client.refcli, client.nom, famart.codfa,
famart.libelle, ligfctc.qte*ligfctc.pxvtht as 'CA, 0 as 'RETOUR'
from client
inner join fctcli on fctcli.refcli = client.refcli
inner join ligfctc on ligfctc.id_fctcli = fctcli.id_fctcli
inner join famart on ligfctc.codfa = famart.codfa
where fctcli.datfct between '20090801' and '20090831'
and client.refcli = '000103'
UNION
select client.refcli, client.nom, famart.codfa,
famart.libelle, 0 as 'CA' , ligavc.qte*ligavc.pxvtht as 'RETOUR'
from client
inner join avcli on avcli .refcli = client.refcli
inner join ligavc on ligavc.id_avcli = avcli.id_avcli
where avcli.datfct between '20090801' and '20090831'
and client.refcli = '000103') AS TMPTable
GROUP By codfa, client.refcli;
"jacques Trepp" <jacques.trepp@free.fr> a écrit dans le message de
news:4ab38903$0$410$426a74cc@news.free.fr...
Bonjour,
je dois faire une stat sur une base existante. En gros, on veut obtenir le
CA HT par vendeur et par famille de produits, à partir des factures, pour
une période donnée.
Jusque là, c'est facile et j'obtiens ce que je veux.
Sauf que dans la base, il y a une table pour les factures, et une table
pour les avoirs (!!), avec bien sur, les tables lignes détail pour
chacune.
Sachant que la requète sur les tables factures et lignes de factures donne
ça :
select client.refcli, client.nom, famart.codfa,
famart.libelle, round(sum(ligfctc.qte*ligfctc.pxvtht),2) as 'CA HT' from
client
inner join fctcli on fctcli.refcli = client.refcli
inner join ligfctc on ligfctc.id_fctcli = fctcli.id_fctcli
inner join famart on ligfctc.codfa = famart.codfa
where fctcli.datfct between '20090801' and '20090831'
and client.refcli = '000103'
group by codfa, client.refcli;
Comment ajouter une colonne RETOUR HT ?
Mes essais dans ce sens ne fonctionnent pas, car, si je fais un join des
avoirs et lignes avoir :
la requète suivante mélange tout.
select client.refcli, client.nom, famart.codfa,
famart.libelle, round(sum(ligfctc.qte*ligfctc.pxvtht),2) as 'CA HT' from
client
inner join fctcli on fctcli.refcli = client.refcli
inner join ligfctc on ligfctc.id_fctcli = fctcli.id_fctcli
inner join avcli on avcli.refcli = client.refcli
inner join ligavc on ligavc.id_avcli = avcli.id_avcli
inner join famart on ligfctc.codfa = famart.codfa
where fctcli.datfct between '20090801' and '20090831'
or avcli.datfct between '20090801' and '20090831'
and client.refcli = '000103'
group by codfa, client.refcli;
y a-t-il un moyen, ou dois-je passer par une vue ?
Merci
--
Jacques TREPP
Albypam
3, rue Jean Mermoz
81160 - ST Juery
__________ Information provenant d'ESET NOD32 Antivirus, version de la
base des signatures de virus 4436 (20090918) __________
Le message a été vérifié par ESET NOD32 Antivirus.
une union sur les 2 requetes avec un select global pour faire les sum et avoir une seule ligne par client par contre dans chaque requete de l'union il faut ajouter la colonne de l'autre requete et tu fait un select sur le resultat
TMPTable.refcli, TMPTable.nom, TMPTable.codfa, TMPTable.libelle, round(sum(TMPtable.CA),2) as 'CA HT' round(sum(TMPTable.RETOUR),2) as 'RETOUR HT'
FROM (
select client.refcli, client.nom, famart.codfa, famart.libelle, ligfctc.qte*ligfctc.pxvtht as 'CA, 0 as 'RETOUR' from client inner join fctcli on fctcli.refcli = client.refcli inner join ligfctc on ligfctc.id_fctcli = fctcli.id_fctcli inner join famart on ligfctc.codfa = famart.codfa
where fctcli.datfct between '20090801' and '20090831' and client.refcli = '000103'
UNION
select client.refcli, client.nom, famart.codfa, famart.libelle, 0 as 'CA' , ligavc.qte*ligavc.pxvtht as 'RETOUR' from client inner join avcli on avcli .refcli = client.refcli inner join ligavc on ligavc.id_avcli = avcli.id_avcli
where avcli.datfct between '20090801' and '20090831' and client.refcli = '000103') AS TMPTable
GROUP By codfa, client.refcli;
"jacques Trepp" a écrit dans le message de news:4ab38903$0$410$
Bonjour, je dois faire une stat sur une base existante. En gros, on veut obtenir le CA HT par vendeur et par famille de produits, à partir des factures, pour une période donnée. Jusque là, c'est facile et j'obtiens ce que je veux. Sauf que dans la base, il y a une table pour les factures, et une table pour les avoirs (!!), avec bien sur, les tables lignes détail pour chacune.
Sachant que la requète sur les tables factures et lignes de factures donne ça :
select client.refcli, client.nom, famart.codfa, famart.libelle, round(sum(ligfctc.qte*ligfctc.pxvtht),2) as 'CA HT' from client
inner join fctcli on fctcli.refcli = client.refcli inner join ligfctc on ligfctc.id_fctcli = fctcli.id_fctcli
inner join famart on ligfctc.codfa = famart.codfa where fctcli.datfct between '20090801' and '20090831'
and client.refcli = '000103' group by codfa, client.refcli;
Comment ajouter une colonne RETOUR HT ? Mes essais dans ce sens ne fonctionnent pas, car, si je fais un join des avoirs et lignes avoir :
la requète suivante mélange tout.
select client.refcli, client.nom, famart.codfa, famart.libelle, round(sum(ligfctc.qte*ligfctc.pxvtht),2) as 'CA HT' from client
inner join fctcli on fctcli.refcli = client.refcli inner join ligfctc on ligfctc.id_fctcli = fctcli.id_fctcli
inner join avcli on avcli.refcli = client.refcli inner join ligavc on ligavc.id_avcli = avcli.id_avcli
inner join famart on ligfctc.codfa = famart.codfa where fctcli.datfct between '20090801' and '20090831' or avcli.datfct between '20090801' and '20090831'
and client.refcli = '000103'
group by codfa, client.refcli;
y a-t-il un moyen, ou dois-je passer par une vue ?
Merci
-- Jacques TREPP Albypam 3, rue Jean Mermoz 81160 - ST Juery
__________ Information provenant d'ESET NOD32 Antivirus, version de la base des signatures de virus 4436 (20090918) __________
Le message a été vérifié par ESET NOD32 Antivirus.
http://www.eset.com
jacques Trepp
"Firetox" a écrit dans le message de news:4ab3938a$0$1547$
Bonjour jacques
une union sur les 2 requetes avec un select global pour faire les sum et avoir une seule ligne par client par contre dans chaque requete de l'union il faut ajouter la colonne de l'autre requete et tu fait un select sur le resultat
TMPTable.refcli, TMPTable.nom, TMPTable.codfa, TMPTable.libelle, round(sum(TMPtable.CA),2) as 'CA HT' round(sum(TMPTable.RETOUR),2) as 'RETOUR HT'
FROM (
select client.refcli, client.nom, famart.codfa, famart.libelle, ligfctc.qte*ligfctc.pxvtht as 'CA, 0 as 'RETOUR' from client inner join fctcli on fctcli.refcli = client.refcli inner join ligfctc on ligfctc.id_fctcli = fctcli.id_fctcli inner join famart on ligfctc.codfa = famart.codfa
where fctcli.datfct between '20090801' and '20090831' and client.refcli = '000103'
UNION
select client.refcli, client.nom, famart.codfa, famart.libelle, 0 as 'CA' , ligavc.qte*ligavc.pxvtht as 'RETOUR' from client inner join avcli on avcli .refcli = client.refcli inner join ligavc on ligavc.id_avcli = avcli.id_avcli
where avcli.datfct between '20090801' and '20090831' and client.refcli = '000103') AS TMPTable
GROUP By codfa, client.refcli;
Bonjour et merci, Fred :) En farfouillant dans cette base, j'ai trouvé dans la table lignes-facture une colonne quantité_retour que j'ai pu utiliser pour extraire les renseignements demandés.
Du coup, la requète : select client.refcli, client.nom, famart.codfa, famart.libelle, round(sum(ligfctc.qte*ligfctc.pxvtht),2) as 'CA HT', round(sum(ligfctc.qteret*ligfctc.pxvtht),2) as 'RT HT', round(sum(ligfctc.qte*ligfctc.pxvtht),2)-round(sum(ligfctc.qteret*ligfctc.pxvtht),2) as 'CA' from client
inner join fctcli on fctcli.refcli = client.refcli inner join ligfctc on ligfctc.id_fctcli = fctcli.id_fctcli
inner join famart on ligfctc.codfa = famart.codfa where fctcli.datfct between '20090801' and '20090831'
and client.refcli in ('000103','000104')
group by codfa, client.refcli order by client.refcli, codfa, datfct;
fonctionne parfaitement.
PS : je pensais pouvoir utiliser les alias de colonnes comme des colonnes, mais j'en demande trop, sans doute : 'CA HT' - 'RT HT' ne fonctionne pas. ;)
Bon Week-end
-- Jacques TREPP Albypam 3, rue Jean Mermoz 81160 - ST Juery
__________ Information provenant d'ESET NOD32 Antivirus, version de la base des signatures de virus 4437 (20090918) __________
Le message a été vérifié par ESET NOD32 Antivirus.
http://www.eset.com
"Firetox" <firetox@free.fr> a écrit dans le message de
news:4ab3938a$0$1547$426a34cc@news.free.fr...
Bonjour jacques
une union sur les 2 requetes avec un select global pour faire les sum et
avoir une seule ligne par client
par contre dans chaque requete de l'union il faut ajouter la colonne de
l'autre requete et tu fait un select sur le resultat
TMPTable.refcli, TMPTable.nom, TMPTable.codfa,
TMPTable.libelle,
round(sum(TMPtable.CA),2) as 'CA HT'
round(sum(TMPTable.RETOUR),2) as 'RETOUR HT'
FROM (
select client.refcli, client.nom, famart.codfa,
famart.libelle, ligfctc.qte*ligfctc.pxvtht as 'CA, 0 as 'RETOUR'
from client
inner join fctcli on fctcli.refcli = client.refcli
inner join ligfctc on ligfctc.id_fctcli = fctcli.id_fctcli
inner join famart on ligfctc.codfa = famart.codfa
where fctcli.datfct between '20090801' and '20090831'
and client.refcli = '000103'
UNION
select client.refcli, client.nom, famart.codfa,
famart.libelle, 0 as 'CA' , ligavc.qte*ligavc.pxvtht as 'RETOUR'
from client
inner join avcli on avcli .refcli = client.refcli
inner join ligavc on ligavc.id_avcli = avcli.id_avcli
where avcli.datfct between '20090801' and '20090831'
and client.refcli = '000103') AS TMPTable
GROUP By codfa, client.refcli;
Bonjour et merci, Fred :)
En farfouillant dans cette base, j'ai trouvé dans la table lignes-facture
une colonne quantité_retour que j'ai pu utiliser pour extraire les
renseignements demandés.
Du coup, la requète :
select client.refcli, client.nom, famart.codfa,
famart.libelle,
round(sum(ligfctc.qte*ligfctc.pxvtht),2) as 'CA HT',
round(sum(ligfctc.qteret*ligfctc.pxvtht),2) as 'RT HT',
round(sum(ligfctc.qte*ligfctc.pxvtht),2)-round(sum(ligfctc.qteret*ligfctc.pxvtht),2)
as 'CA'
from client
inner join fctcli on fctcli.refcli = client.refcli
inner join ligfctc on ligfctc.id_fctcli = fctcli.id_fctcli
inner join famart on ligfctc.codfa = famart.codfa
where fctcli.datfct between '20090801' and '20090831'
and client.refcli in ('000103','000104')
group by codfa, client.refcli
order by client.refcli, codfa, datfct;
fonctionne parfaitement.
PS : je pensais pouvoir utiliser les alias de colonnes comme des colonnes,
mais j'en demande trop, sans doute :
'CA HT' - 'RT HT' ne fonctionne pas. ;)
Bon Week-end
--
Jacques TREPP
Albypam
3, rue Jean Mermoz
81160 - ST Juery
__________ Information provenant d'ESET NOD32 Antivirus, version de la base des signatures de virus 4437 (20090918) __________
Le message a été vérifié par ESET NOD32 Antivirus.
"Firetox" a écrit dans le message de news:4ab3938a$0$1547$
Bonjour jacques
une union sur les 2 requetes avec un select global pour faire les sum et avoir une seule ligne par client par contre dans chaque requete de l'union il faut ajouter la colonne de l'autre requete et tu fait un select sur le resultat
TMPTable.refcli, TMPTable.nom, TMPTable.codfa, TMPTable.libelle, round(sum(TMPtable.CA),2) as 'CA HT' round(sum(TMPTable.RETOUR),2) as 'RETOUR HT'
FROM (
select client.refcli, client.nom, famart.codfa, famart.libelle, ligfctc.qte*ligfctc.pxvtht as 'CA, 0 as 'RETOUR' from client inner join fctcli on fctcli.refcli = client.refcli inner join ligfctc on ligfctc.id_fctcli = fctcli.id_fctcli inner join famart on ligfctc.codfa = famart.codfa
where fctcli.datfct between '20090801' and '20090831' and client.refcli = '000103'
UNION
select client.refcli, client.nom, famart.codfa, famart.libelle, 0 as 'CA' , ligavc.qte*ligavc.pxvtht as 'RETOUR' from client inner join avcli on avcli .refcli = client.refcli inner join ligavc on ligavc.id_avcli = avcli.id_avcli
where avcli.datfct between '20090801' and '20090831' and client.refcli = '000103') AS TMPTable
GROUP By codfa, client.refcli;
Bonjour et merci, Fred :) En farfouillant dans cette base, j'ai trouvé dans la table lignes-facture une colonne quantité_retour que j'ai pu utiliser pour extraire les renseignements demandés.
Du coup, la requète : select client.refcli, client.nom, famart.codfa, famart.libelle, round(sum(ligfctc.qte*ligfctc.pxvtht),2) as 'CA HT', round(sum(ligfctc.qteret*ligfctc.pxvtht),2) as 'RT HT', round(sum(ligfctc.qte*ligfctc.pxvtht),2)-round(sum(ligfctc.qteret*ligfctc.pxvtht),2) as 'CA' from client
inner join fctcli on fctcli.refcli = client.refcli inner join ligfctc on ligfctc.id_fctcli = fctcli.id_fctcli
inner join famart on ligfctc.codfa = famart.codfa where fctcli.datfct between '20090801' and '20090831'
and client.refcli in ('000103','000104')
group by codfa, client.refcli order by client.refcli, codfa, datfct;
fonctionne parfaitement.
PS : je pensais pouvoir utiliser les alias de colonnes comme des colonnes, mais j'en demande trop, sans doute : 'CA HT' - 'RT HT' ne fonctionne pas. ;)
Bon Week-end
-- Jacques TREPP Albypam 3, rue Jean Mermoz 81160 - ST Juery
__________ Information provenant d'ESET NOD32 Antivirus, version de la base des signatures de virus 4437 (20090918) __________
Le message a été vérifié par ESET NOD32 Antivirus.