Bonjour à tous,

Je souhaiterais faire une requête me permettant de:
- ne garder que les enregistrements d'ordre 1 et de ne pas garder les enregistrements d'ordre 2 à partir du moment où ordre 1 est différent de Paris CDG.
- ne garder que les enregistrements d'ordre 2 et de ne pas garder les enregistrements d'ordre 1 à partir du moment où ordre 1 est égal à Paris CDG.

Ci-après les exemples simples de mes tables, de la requête déjà testée ainsi que des orientations auxquelles je pense:
table des lieux:
id_lieu nom_lieu id_proximite
1 Arras 1
2 Dunkerque 1
3 Lens 1
4 Amiens 2
5 Beauvais 2
6 Compiègne 2
7 Chambéry 3
8 Voiron 3
9 Gap 3

table des proximités
id_proximite nom_proximite id_ordre
1 Lille_p 1
2 Paris_p 2
3 Grenoble_p 3

table des ordres
id_ordre ordre id_aeroport
1 1 1
1 2 2
1 3 3
2 1 2
2 2 1
2 3 3
3 1 3
3 2 1
3 3 2

table des aeroport
id_aeroport nom_aeroport
1 Lille LIL
2 Paris CDG
3 Grenoble GNB

Cette requête me permet de visualiser chaque lieu avec les deux premiers aéroports les plus proches récupérés selon les valeurs de la table ordre_aeroport. L'objectif étant de récupérer l'aéroport de ordre = 2 si Paris CDG a ordre = 1:
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
19
20
21
22
23
24
SELECT *
from
(SELECT
lieu.nom_lieu,
proximite.nom_proximite,
ordre.ordre,
CASE
WHEN aeroport.nom_aeroport <> 'Paris CDG' and ordre.ordre = 1 then 1
WHEN aeroport.nom_aeroport = 'Paris CDG' and ordre.ordre = 1 then 0
ELSE 2 
END as ordre_ss_paris,
aeroport.nom_aeroport
FROM lieu
LEFT JOIN proximite ON lieu.id_proximite = proximite.id_proximite
LEFT JOIN ordre ON proximite.id_ordre = ordre.id_ordre
LEFT JOIN aeroport ON ordre.id_aeroport = aeroport.id_aeroport
WHERE
ordre.ordre <3
) as requete
WHERE
CASE
WHEN requete.ordre = requete.ordre_ss_paris THEN requete.ordre
ELSE null
END
Le résultat, présenté ci-dessous ne correspond pas à ce que je voudrais:
Les lignes noires correspondent aux localisations où l'ordre 1 doit être gardé.
Les lignes en rouge correspondent à l'ordre 2 que je ne veux pas voir apparaître dans le résultat final. Lignes que je pensais voir disparaître avec le filtre sur la vue.
Les lignes vertes correspondent au résultat attendu, à savoir je ne récupère que les ordre 2 à partir du moment où Paris CDG est en ordre 1
nom_lieu nom_proximite ordre ordre_ss_paris nom_aeroport
Arras Lille_p 1 1 Lille LIL
Arras Lille_p 2 2 Paris CDG
Dunkerque Lille_p 1 1 Lille LIL
Dunkerque Lille_p 2 2 Paris CDG
Lens Lille_p 1 1 Lille LIL
Lens Lille_p 2 2 Paris CDG
Amiens Paris_p 2 2 Lille LIL
Beauvais Paris_p 2 2 Lille LIL
Compiègne Paris_p 2 2 Lille LIL
Chambéry Grenoble_p 1 1 Grenoble GNB
Chambéry Grenoble_p 2 2 Lille LIL
Voiron Grenoble_p 1 1 Grenoble GNB
Voiron Grenoble_p 2 2 Lille LIL
Gap Grenoble_p 1 1 Grenoble GNB
Gap Gernoble_p 2 2 Lille LIL

Je pense qu'il faudrait que je passe par une boucle de type:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
DECLARE
WHILE
BEGIN
SELECT
OFFSET
  SET
END
D'avance merci pour votre aide!