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

SQL Oracle Discussion :

aide sur écriture d'une requète


Sujet :

SQL Oracle

  1. #1
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut aide sur écriture d'une requète
    Bonjour,
    J'ai besoin d'écrire la requete suivante (peut être n'est ce pas possible) sur la table suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    desc awy_sect
    airway_name     not null varchar2(7)
    order_num       not null number(38)
    point_name      not null varchar2(5)
    soit les instance suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    AWY1    1    PT1
    AWY1    2    PT2
    AWY1    3    PT3
    AWY2    1    PTA
    AWY2    2    PTB
    AWY2    3    PTC
    AWY2    4    PTD
    Je voudrais que ma requete SQL me renvoie une liste de couples de point_name (point courant + point suivant) ordonnée par airway_name et order_num, soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    AWY1 PT1 PT2
    AWY1 PT2 PT3
    AWY2 PTA PTB
    AWY2 PTB PTC
    AWY3 PTC PTD
    Si quelqu'un a une piste ?
    Merci

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Avec la fonction LEAD :
    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
    25
    26
    27
    With awy_sect as
    (
    select 'AWY1' as airway_name, 1 as order_num, 'PT1' as point_name from dual union all
    select 'AWY1'               , 2             , 'PT2'               from dual union all
    select 'AWY1'               , 3             , 'PT3'               from dual union all
    select 'AWY2'               , 1             , 'PTA'               from dual union all
    select 'AWY2'               , 2             , 'PTB'               from dual union all
    select 'AWY2'               , 3             , 'PTC'               from dual union all
    select 'AWY2'               , 4             , 'PTD'               from dual
    )
      ,  sr as
    (
    select airway_name, point_name as point_courant,
           lead(point_name) over(partition by airway_name order by order_num asc) as point_suivant
      from awy_sect 
    )
    select airway_name, point_courant, point_suivant
      from sr
     where point_suivant is not null;
     
    AIRWAY_NAME POINT_COURANT POINT_SUIVANT
    ----------- ------------- -------------
    AWY1        PT1           PT2
    AWY1        PT2           PT3
    AWY2        PTA           PTB
    AWY2        PTB           PTC
    AWY2        PTC           PTD

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Dans ce cas simple une jointure pourrait faire l'affaire
    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
    25
    26
    27
    28
    29
    30
    31
    32
     
    Connected to Oracle Database 10g Express Edition Release 10.2.0.1.0 
    Connected as mni
     
    SQL> 
    SQL> WITH awy_sect AS
      2  (
      3  SELECT 'AWY1' AS airway_name, 1 AS order_num, 'PT1' AS point_name FROM dual union ALL
      4  SELECT 'AWY1'               , 2             , 'PT2'               FROM dual union ALL
      5  SELECT 'AWY1'               , 3             , 'PT3'               FROM dual union ALL
      6  SELECT 'AWY2'               , 1             , 'PTA'               FROM dual union ALL
      7  SELECT 'AWY2'               , 2             , 'PTB'               FROM dual union ALL
      8  SELECT 'AWY2'               , 3             , 'PTC'               FROM dual union ALL
      9  SELECT 'AWY2'               , 4             , 'PTD'               FROM dual
     10  )
     11  Select a.airway_name, a.point_name start_point, b.point_name end_point
     12    from awy_sect a
     13         Join
     14         awy_sect b
     15      On a.airway_name = b.airway_name
     16         And a.order_num = b.order_num - 1
     17  /
     
    AIRWAY_NAME START_POINT END_POINT
    ----------- ----------- ---------
    AWY1        PT1         PT2
    AWY1        PT2         PT3
    AWY2        PTA         PTB
    AWY2        PTB         PTC
    AWY2        PTC         PTD
     
    SQL>

  4. #4
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    Merci de votre rapidité.
    Je retiens particulièrement la solution de 'waldar' car elle ne dépends pas des valeurs de ORDER_NUM mais de leur ordre, c'est ce que je voulais en fait.
    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Demande d'aide sur l’exécution d'une requête
    Par barousmane dans le forum Access
    Réponses: 1
    Dernier message: 25/08/2014, 16h30
  2. [11g] Besoin d'aide pour écriture d'une requête
    Par telchargement dans le forum SQL
    Réponses: 3
    Dernier message: 19/04/2013, 11h05
  3. Aide pour l'écriture d'une requête
    Par mims1664 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/04/2009, 20h23
  4. Aide écriture d'une requête
    Par gabooo dans le forum Requêtes
    Réponses: 5
    Dernier message: 14/02/2007, 18h41
  5. [SYBASE] Aide pour l'écriture d'une requête
    Par karine77 dans le forum Sybase
    Réponses: 2
    Dernier message: 26/04/2005, 10h57

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