OVH Cloud OVH Cloud

Simplification requêtes SQL : possible ?

2 réponses
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.

A+

2 réponses

Avatar
Laurent Moreau
Une requete du genre:


SELECT T1.CodeClient, T1.Annee, T1.Nb, T1.Total, T2.Nb, T2.Toal,
T1.Total/T2.Total AS Part
FROM
(
SELECT CodeClient, Year(DateFacture) AS Annee, COUNT(MontantFactrure) AS Nb,
SUM(MontantFactrure) AS Total
FROM LaTable
GROUP BY CodeClient, Year(DateFacture)
) T1
INNER JOIN
(
SELECT Year(DateFacture) AS Annee, COUNT(MontantFactrure) AS Nb,
SUM(MontantFactrure) AS Total
FROM LaTable
GROUP BY CodeClient, Year(DateFacture)
) T2
ON T1.Annee=T2.Annee


je l'ai pas testée...


Laurent.




"Manulk" wrote in message
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.

A+


Avatar
Lac
salut,
tu peux essayer ca...

select substring([Date],1,4) d,sum([Montant]) as Total_client ,
(select sum([Montant]) from [Table] b where substring(b.[Date],1,4) substring(a.[Date],1,4) ) as Total_année
, case sum([Montant]) when 0 then 0 else
sum([Montant]) / (select sum([Montant]) from [Table] b where
substring(b.[Date],1,4) = substring(a.[Date],1,4) ) * 100 end
as '%'
,[Client]
from [Table] a
group by [Client], substring([Date],1,4)
order by d,[Client]




"Manulk" a écrit dans le message de
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.

A+