Bonjour,

Je cherche depuis un petit moment comment rédiger une requête SQL suite à une demande bien précise. Je ne trouve rien de satisfaisant dans les recherches sur Internet.

On a par exemple les données suivantes :
- table TEST_TYPES :
ID_TYPE LIB_TYPE PRIORITE
A Test 1 1
B Test 2 3
C Test 3 2

- table TEST_CLI :
ID_CLI ID_TYPE MONTANT
123 B 400
234 A 16
234 B 16
345 C 0
456 C 0

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
16
17
18
 
    create table test_types as (
        select 'A' ID_TYPE, 'Test 1' LIB_TYPE, 1 PRIORITE from dual
        union
        select 'B' ID_TYPE, 'Test 2' LIB_TYPE, 3 PRIORITE from dual
        union
        select 'C' ID_TYPE, 'Test 3' LIB_TYPE, 2 PRIORITE from dual);
 
    create table test_cli as (
        select 123 ID_CLI, 'B' ID_TYPE, 400 MONTANT from dual
        union
        select 234 ID_CLI, 'B' ID_TYPE, 16 MONTANT from dual
        union
        select 234 ID_CLI, 'A' ID_TYPE, 16 MONTANT from dual
        union
        select 345 ID_CLI, 'C' ID_TYPE, 0 MONTANT from dual
        union
        select 456 ID_CLI, 'C' ID_TYPE, 0 MONTANT from dual);
La requête actuelle est de la forme suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
select T.PRIORITE,
       C.ID_CLI,
       T.LIB_TYPE,
       C.MONTANT
from TEST_CLI C inner join TEST_TYPES T
         on T.ID_TYPE = C.ID_TYPE
order by T.PRIORITE asc, C.MONTANT desc, C.ID_CLI asc
Elle retourne :

PRIORITE ID_CLI LIB_TYPE MONTANT
1 234 Test 1 16
2 345 Test 3 0
2 456 Test 3 0
3 123 Test 2 400
3 234 Test 2 16

-> il faut trier les lignes par priorité (asc) et montant (desc)

La demande qui m'a été faite doit retourner ceci :

PRIORITE ID_CLI LIB_TYPE MONTANT
1 234 Test 1 16
3 234 Test 2 16
2 345 Test 3 0
2 456 Test 3 0
3 123 Test 2 400

-> il faut toujours trier les lignes par priorité (asc) et montant (desc) mais si on a un client avec plusieurs priorités, il faut ramener ses lignes par priorité, puis reprendre le tri normal pour le reste du résultat.

NB : il n'est pas nécessaire de ramener la priorité mais elle fait partie du tri.
En réel j'ai beaucoup plus d'infos mais elles ne sont pas utiles au tri.

J'ai essayé diverses fonctions analytiques, de tri, de groupe, ... mais je n'arrive à rien de proche. Je m'y prends peut-être mal.

Quelqu'un a une idée ? Merci d'avance