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

PL/SQL Oracle Discussion :

Identifier le premier et le dernier enregistrement d'une requete SQL


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut Identifier le premier et le dernier enregistrement d'une requete SQL
    Sous Oracle 10g
    Savez vous s'il est possible d'identifier le dernier enregistrement d'une requete SQL ? (Pour le premier pas de pb avec "rownum" mais pour le dernier ça me semble plus coton)

    Je m'explique
    J'ai la table suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Create table TEST 
    (
    A number(1),
    B number(1),
    C number(1)
    );
    Son contenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /* Populate */ 
     
    Insert into test (A,B,C) 
    Select 1,2,3 from dual Union 
    Select 4,5,6 from dual Union 
    Select 7,8,9 from dual Union 
    Select 0,1,2 from dual Union 
    Select 3,4,5 from dual Union 
    Select 6,7,8 from dual Union
    Select 9,0,1 from dual Union
    Select 2,3,4 from dual Union
    Select 5,6,7 from dual Union
    Select 8,9,0 from dual ;
    Je souhaite faire une requete qui identifie le premier (D) et le dernier enreg (F) d'une requete quelquonque sur la table TEST les autres enregistrements sont identifiés par "R"
    Je ne connais evidemment pas le nombre d'enreg que me rammenera la requete

    Exemple (trié sur la colone B)
    voici le resultat attendu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    IdA,B,C
    =====
    D 9 0 1
    R 0 1 2
    R 1 2 3
    R 2 3 4
    R 3 4 5
    R 4 5 6
    R 5 6 7
    R 6 7 8
    R 7 8 9
    F 8 9 0
    ou trié sur la colone A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    IdA,B,C
    D 0 1 2
    R 1 2 3
    R 2 3 4
    R 3 4 5
    R 4 5 6
    R 5 6 7
    R 6 7 8
    R 7 8 9
    R 8 9 0
    F 9 0 1
    PS : pour l'instant j'en suis ici (il me manque l'info du dernier enreg)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select decode(rownum,1,'D','R') As Id, A.* from (Select * from test order by A) A
    Si vous avez une solution "simple" je suis preneur
    Merci de votre aide
    Cordialement
    @argoet

  2. #2
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut fonction analytique row_number
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select
             decode ( 1
                            , row_number() over(order by a desc ) , 'F'
                            , row_number() over(order by a asc  ) , 'D'
                            , 'R'
            ) , test.*
    from test
    /
    Cordialement,
    Franck.

  3. #3
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut
    Excelent
    Merci à Vous Pachot

    Pour répondre completement à ma question voici un exemple de code ou vous n'avez qu'à modifier la partie (Ecrivez votre requete Ici)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT
             decode ( 1, row_number() over(ORDER BY Rng DESC ) , 'F'
                       , row_number() over(ORDER BY Rng ASC  ) , 'D'
                       , 'R'
            ) , Qry.* 
    FROM    (SELECT rownum as Rng, A.* FROM (Ecrivez votre requete Ici) A ) Qry
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT
             decode ( 1, row_number() over(ORDER BY Rng DESC ) , 'F'
                       , row_number() over(ORDER BY Rng ASC  ) , 'D'
                       , 'R'
            ) , Qry.* 
    FROM    (SELECT rownum as Rng, A.* FROM (Select * from test order by C) A ) Qry

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

Discussions similaires

  1. Réponses: 20
    Dernier message: 09/03/2011, 08h59
  2. nbre d'enregistrement d'une requete SQL "java"
    Par med.jrd dans le forum JDBC
    Réponses: 3
    Dernier message: 06/12/2007, 21h54
  3. compter enregistrement dans une requete sql avec UNION
    Par dbzzzde dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/10/2007, 11h43
  4. modification d'enregistrements d'une requete SQL
    Par Pitou5464 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 12/09/2006, 18h34
  5. Dernier enregistrement d'une requete
    Par w3sk3r dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 20/08/2006, 20h19

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