Bonjour à tous,

Je fais appel à vous car je souhaiterais faire un scoring des mes clients.

J'ai à disposition une table de fait : facturation.

Cette table est au niveau de détails de la facture. Donc pour tous mes clients j'ai toutes leurs factures.

Dans un 1er temps j'ai créé un 'WITH' :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
	WITH scoring as (
	SELECT
			code_produit as produit,
			code_ville as ville,
			code_activite as activite,
			raisonsociale as client,
			montant_ht,        
			annee_emission_facture
	FROM    facturation f
	)
Dans un 2nd temps, j'ai créé la requête qui me permet d'avoir le classement des mes clients :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
        SELECT 
                client,
                sum(montant_ht) as montant_ht,
                rank() OVER ( ORDER BY Sum(montant_ht) DESC) as rank2
        FROM scoring
        group by client
Là où cela se complique : lorsque l'on me demande de n'afficher que les 2 premiers clients, je dois créer un client 'Total' qui serait la somme de mes 2 premiers clients :

Par exemple:
TOTAL_CLIENT 5000
CLIENT_1 3500
CLIENT_2 1500

J'ai bien tenté de faire ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
Select * from (
        SELECT 
                client,
                sum(montant_ht) as montant_ht,
                rank() OVER ( ORDER BY Sum(montant_ht) DESC) as rank2
        FROM scoring
        group by client
UNION
        SELECT
                'Z_Total' as client,
                sum(montant_ht) as montant_ht,
                0 as rank2
        FROM scoring)A
WHERE a.rank2 <=2
Mais sur la colonne 'Z_Total', il me somme toutes les lignes de ma table, il ne prend pas en compte le rank.
Sachant que dans le meilleur des mondes, il faudrait que je n'ai qu'une seule fois la clause Where rank2 <=2Pouvez-vous m'orienter sur la solution ?
Je me tiens à votre disposition.

Cordialement.
Un néophyte