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
Eric
Bonjour Manulk
Je traiterai ton problème en faisant une requête Sélection Analyse croisée. Une seule requête suffit.
Je te donne le sql en utilisant une table nommée TaTable avec des montants pour les années 2003 et 2004
SQL de la requête Sélection Analyse Croisée:
TRANSFORM Sum(TaTable.MontantFacture) AS SommeDeMontantFacture SELECT TaTable.CodeClient, CCur(DSum("[MontantFacture]","TaTable","year ([Datefacture]) 03")) AS CA2003, CCur(DSum ("[MontantFacture]","TaTable","year([Datefacture]) 04")) AS CA2004, CCur(nz(DSum("[MontantFacture]","TaTable","year([Datefacture]) 03 and [CodeClient]=" & [CodeClient]))/CCur(DSum ("[MontantFacture]","TaTable","year([Datefacture]) 03"))) AS [% Client2003], CCur(nz(DSum("[MontantFacture]","TaTable","year ([Datefacture]) 04 and [CodeClient]=" & [CodeClient]))/CCur(DSum ("[MontantFacture]","TaTable","year([Datefacture]) 04"))) AS [% Client2004] FROM TaTable GROUP BY TaTable.CodeClient, CCur(DSum("[MontantFacture]","TaTable","year ([Datefacture]) 03")), CCur(DSum("[MontantFacture]","TaTable","year ([Datefacture]) 04")), CCur(nz(DSum("[MontantFacture]","TaTable","year ([Datefacture]) 03 and [CodeClient]=" & [CodeClient]))/CCur(DSum ("[MontantFacture]","TaTable","year([Datefacture]) 03"))), CCur(nz(DSum ("[MontantFacture]","TaTable","year([Datefacture]) 04 and [CodeClient] =" & [CodeClient]))/CCur(DSum("[MontantFacture]","TaTable","year ([Datefacture]) 04"))) PIVOT "Année " & Year([DateFacture]);
Espérant que ca puisse t'aider A+ Eric
Ps1: le fait d'utiliser des fonctions comme DSum (SomDom en Fr) ralentit le traitement.
Ps2: Tu peux transformer cette requête en requête sélection simple mais tu auras 2 lignes par client dès lors qu'ils ont des montants pour 2003 & 2004 et les % s'afficheront sur les 2 lignes mais en double.
(Manulk) écrivait news::
Bonjour,
Mon problème :
A partir d'une table :
CodeClient (ex: toto, tata, etc...) DateFacture (différentes dates sur plusieurs années) MontantFacture (numérique standard)
Obtenir :
Code Année Total client Total global Part% toto 2004 2 680,00 4 180,00 64,11 toto 2003 1 372,00 1 372,00 100,00 tata 2004 1 500,00 4 180,00 35,89
Actuellement j'obtiens ça avec 3 requêtes, la dernière étant basée sur les 2 précédentes.
Je voudrais savoir s'il est possible (grâce à une requête savante) d'obtenir ça en une seule ou deux requêtes.
J'enverrai volontiers ma base Access à qui souhaitera cogiter dessus.
A+
Bonjour Manulk
Je traiterai ton problème en faisant une requête Sélection Analyse
croisée. Une seule requête suffit.
Je te donne le sql en utilisant une table nommée TaTable avec des
montants pour les années 2003 et 2004
SQL de la requête Sélection Analyse Croisée:
TRANSFORM Sum(TaTable.MontantFacture) AS SommeDeMontantFacture
SELECT TaTable.CodeClient, CCur(DSum("[MontantFacture]","TaTable","year
([Datefacture]) 03")) AS CA2003, CCur(DSum
("[MontantFacture]","TaTable","year([Datefacture]) 04")) AS CA2004,
CCur(nz(DSum("[MontantFacture]","TaTable","year([Datefacture]) 03 and
[CodeClient]=" & [CodeClient]))/CCur(DSum
("[MontantFacture]","TaTable","year([Datefacture]) 03"))) AS [%
Client2003], CCur(nz(DSum("[MontantFacture]","TaTable","year
([Datefacture]) 04 and [CodeClient]=" & [CodeClient]))/CCur(DSum
("[MontantFacture]","TaTable","year([Datefacture]) 04"))) AS [%
Client2004]
FROM TaTable
GROUP BY TaTable.CodeClient, CCur(DSum("[MontantFacture]","TaTable","year
([Datefacture]) 03")), CCur(DSum("[MontantFacture]","TaTable","year
([Datefacture]) 04")), CCur(nz(DSum("[MontantFacture]","TaTable","year
([Datefacture]) 03 and [CodeClient]=" & [CodeClient]))/CCur(DSum
("[MontantFacture]","TaTable","year([Datefacture]) 03"))), CCur(nz(DSum
("[MontantFacture]","TaTable","year([Datefacture]) 04 and [CodeClient]
=" & [CodeClient]))/CCur(DSum("[MontantFacture]","TaTable","year
([Datefacture]) 04")))
PIVOT "Année " & Year([DateFacture]);
Espérant que ca puisse t'aider
A+
Eric
Ps1: le fait d'utiliser des fonctions comme DSum (SomDom en Fr) ralentit
le traitement.
Ps2: Tu peux transformer cette requête en requête sélection simple mais
tu auras 2 lignes par client dès lors qu'ils ont des montants pour 2003 &
2004 et les % s'afficheront sur les 2 lignes mais en double.
Je traiterai ton problème en faisant une requête Sélection Analyse croisée. Une seule requête suffit.
Je te donne le sql en utilisant une table nommée TaTable avec des montants pour les années 2003 et 2004
SQL de la requête Sélection Analyse Croisée:
TRANSFORM Sum(TaTable.MontantFacture) AS SommeDeMontantFacture SELECT TaTable.CodeClient, CCur(DSum("[MontantFacture]","TaTable","year ([Datefacture]) 03")) AS CA2003, CCur(DSum ("[MontantFacture]","TaTable","year([Datefacture]) 04")) AS CA2004, CCur(nz(DSum("[MontantFacture]","TaTable","year([Datefacture]) 03 and [CodeClient]=" & [CodeClient]))/CCur(DSum ("[MontantFacture]","TaTable","year([Datefacture]) 03"))) AS [% Client2003], CCur(nz(DSum("[MontantFacture]","TaTable","year ([Datefacture]) 04 and [CodeClient]=" & [CodeClient]))/CCur(DSum ("[MontantFacture]","TaTable","year([Datefacture]) 04"))) AS [% Client2004] FROM TaTable GROUP BY TaTable.CodeClient, CCur(DSum("[MontantFacture]","TaTable","year ([Datefacture]) 03")), CCur(DSum("[MontantFacture]","TaTable","year ([Datefacture]) 04")), CCur(nz(DSum("[MontantFacture]","TaTable","year ([Datefacture]) 03 and [CodeClient]=" & [CodeClient]))/CCur(DSum ("[MontantFacture]","TaTable","year([Datefacture]) 03"))), CCur(nz(DSum ("[MontantFacture]","TaTable","year([Datefacture]) 04 and [CodeClient] =" & [CodeClient]))/CCur(DSum("[MontantFacture]","TaTable","year ([Datefacture]) 04"))) PIVOT "Année " & Year([DateFacture]);
Espérant que ca puisse t'aider A+ Eric
Ps1: le fait d'utiliser des fonctions comme DSum (SomDom en Fr) ralentit le traitement.
Ps2: Tu peux transformer cette requête en requête sélection simple mais tu auras 2 lignes par client dès lors qu'ils ont des montants pour 2003 & 2004 et les % s'afficheront sur les 2 lignes mais en double.
(Manulk) écrivait news::
Bonjour,
Mon problème :
A partir d'une table :
CodeClient (ex: toto, tata, etc...) DateFacture (différentes dates sur plusieurs années) MontantFacture (numérique standard)
Obtenir :
Code Année Total client Total global Part% toto 2004 2 680,00 4 180,00 64,11 toto 2003 1 372,00 1 372,00 100,00 tata 2004 1 500,00 4 180,00 35,89
Actuellement j'obtiens ça avec 3 requêtes, la dernière étant basée sur les 2 précédentes.
Je voudrais savoir s'il est possible (grâce à une requête savante) d'obtenir ça en une seule ou deux requêtes.
J'enverrai volontiers ma base Access à qui souhaitera cogiter dessus.