IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Requête SQL + boucle While


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Femme Profil pro
    tech SIG
    Inscrit en
    juin 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : tech SIG
    Secteur : Services de proximité

    Informations forums :
    Inscription : juin 2018
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Requête SQL + boucle While
    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!

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 20 952
    Points : 49 777
    Points
    49 777
    Billets dans le blog
    1
    Par défaut
    Sans la description DDL des tables impossible de vous aider ! Quelle sont les clefs, les types, les contraintes ? Qu'est ce qui lie les lignes d'ordre 1 et 2 ???

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Futur Membre du Club
    Femme Profil pro
    tech SIG
    Inscrit en
    juin 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : tech SIG
    Secteur : Services de proximité

    Informations forums :
    Inscription : juin 2018
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Ci-joint un schéma des relations entre les tables:
    Nom : modele_donnees_aeroport.JPG
Affichages : 47
Taille : 57,2 Ko


    Les proximités correspondent au nom des listes (nom_proximite) qui ordonnancent (id_ordre) les aéroports selon la distance au lieu (1 liste par métropole).

    la table ordre est une table intermédiaire entre les proximités et les aéroports. Elle associe à chaque liste (proximité) un aéroport selon un ordonnancement (ordre).

    L'objectif est de rapidement récupérer le 1er aéroport d'un lieu (ordre 2) si l'aéroport d'ordre 1 actuel n'est plus accessible.

    Est ce que ces explications aident à la compréhension de ma problématique?

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 20 952
    Points : 49 777
    Points
    49 777
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par MarieSIG Voir le message
    ....

    L'objectif est de rapidement récupérer le 1er aéroport d'un lieu (ordre 2) si l'aéroport d'ordre 1 actuel n'est plus accessible.

    Est ce que ces explications aident à la compréhension de ma problématique?
    Oui, c'est mieux... Mais j'ai plus le temps !
    Tu bosse à Eurocontrol ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Futur Membre du Club
    Femme Profil pro
    tech SIG
    Inscrit en
    juin 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : tech SIG
    Secteur : Services de proximité

    Informations forums :
    Inscription : juin 2018
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    non une entreprise de service

Discussions similaires

  1. [MySQL-4.0] SQL Boucle WHILE
    Par alainb dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 22/12/2019, 14h26
  2. [PHP 5.3] Soucis avec le résultat d'une requête (double boucles while)
    Par beegees dans le forum Langage
    Réponses: 7
    Dernier message: 31/05/2010, 23h26
  3. Problème de requête SQL dans une boucle While
    Par Astraya dans le forum VB.NET
    Réponses: 3
    Dernier message: 21/01/2009, 18h18
  4. chargement du Combo Par sql boucle While wend
    Par r.mehdi dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 09/06/2008, 19h16
  5. Réponses: 15
    Dernier message: 11/05/2007, 16h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo