OVH Cloud OVH Cloud

Simplification requêtes SQL Access : possible ?

1 réponse
Avatar
manulk
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+

1 réponse

Avatar
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+