Quelque chose comme :
WITH T AS
(SELECT idclient, refproduit, SUM(ca) AS CA,
RANK() OVER(ORDER BY SUM(ca) DESC) AS N
FROM matable
GROUP BY idClient, refproduit)
SELECT idclient, refproduit, CA
FROM T
WHERE N <= 3;
A +
Le 02/05/2012 15:51, Etienne a �crit :
> Salut.
>
> j'ai une table du style
>
> CREATE TABLE "matable" (
> "idclient" integer,
> "refproduit" text,
> "ca" integer,
> PRIMARY key (idclient, idproduit)
> );
>
>
> Comment puis faire pour avoir pour chaque client le ca g�n�r� par les 3
> principaux produit.
>
> supponsons que la table soit remplie ainsi
>
> idclient, refproduit, ca
> 1, A, 10
> 1, B, 20
> 1, C, 30
> 1, D, 40
> 1, E, 50
> 1, A, 30
> 1, C, 50
> 1, D, 50
> 1, E, 10
>
> J'aimerai avoir au final
> 1, 120
> 2, 130
>
> a savoir
> pour le client 1 la somme 30 + 40 + 50 correspondant aux 3 produits
> qu'il a le plus command� (C, D, E)
> pour le client 2 la somme 30 + 50 + 50 correspondant aux 3 produits
> qu'il a le plus command� (A, C, D)
>
> Peut on faire ca en une seule requ�te ?
> par ce que pour un client bien pr�cis j'y arrive
>
> SELECT idclient, sum(ca) FROM (SELECT idclient, ca FROM matable WHERE
> idclient = 1 ORDER BY ca DESC LIMIT 3) as foo;
>
> me donne ce que je veux pour le client 1 !!!
>
> merci
> Etienne.
>
>
>
--
Fr�d�ric BROUARD - expert SGBDR et SQL - MVP SQL Server - 06 11 86 40 66
Le site sur le langage SQL et les SGBDR :
http://sqlpro.developpez.com
Enseignant Arts & M�tiers PACA, ISEN Toulon et CESI/EXIA Aix en Provence
Audit, conseil, expertise, formation, mod�lisation, tuning, optimisation
***********************
http://www.sqlspot.com *************************