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
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
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);
Elle retourne :
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
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
Partager