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:
Le résultat, présenté ci-dessous ne correspond pas à ce que je voudrais:
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
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:
D'avance merci pour votre aide!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 DECLARE WHILE BEGIN SELECT OFFSET SET END
Partager