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 :

Afficher le numéro de ligne [11g]


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 937
    Points : 348
    Points
    348
    Par défaut Afficher le numéro de ligne
    Bonjour ,
    je cherche à avoir le numero de ligne, à partir d'une requête, mais je n'arrive pas à le récupérer.

    Ma requête génère initialement 20 résultats, elle se présente de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    select distinct t1.nom as nom,
     row_number() over(order by ta.x503_matricule) as numLigne,  --ligne pour avoir le numéro de ligne
    t1.prenom,
    ....
    ....
    from tabepersonneT1
    inner join...
    ...
    ...
    mais lorsque j'ai rajouté cette ligne, elle me génère une centaine de ligne avec des doublons, même en utilisant :
    j'ai le même problème, comment ça se fait? Mon but est d'avoir un numéro qui s’incrémente , par exemple, pour ma requête qui génère 20 résultats, j'ai des numéro de 1 à 20.

    J'utilise sqldeveloper, mais j'ai également la version d'essai de Toad, n'y a t-il pas un moyen , lors de l'export de dire d'afficher les numéros de ligne?

    Merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 830
    Points : 1 591
    Points
    1 591
    Par défaut
    J'imagine que c'est une c...erie que j'aurais pu faire

    Le problème provient du DISTINCT.
    Comment avoir des valeurs distinctes quand on ajoute le n° de ligne ?

    La solution passe par une CTE ou une sous requête (faire en 2 temps quoi)

    Dis nous si c'était bien ça
    A+

  3. #3
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    2 solutions :
    Soit la sous-requête (le plus rapide à faire en général)
    Attention avec rownum pas de order by au même niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT num, ROWNUM nolig
    FROM (
          SELECT DISTINCT MOD(LEVEL, 10)  num FROM dual connect BY LEVEL <= 100 ORDER BY 1
    )
    Soit le group by (pour remplacer le DISTINCT), et une fonction de fenêtrage row_number (attention, le ORDER du nolig peut être différent du order du group by

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT MOD(LEVEL, 10)  num, row_number() OVER (ORDER BY MOD(LEVEL, 10)) nolig FROM dual connect BY LEVEL <= 100 
    GROUP BY MOD(LEVEL, 10)
    exemple avec le même ordre
    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
    SELECT MOD(LEVEL, 10)  num, row_number() OVER (ORDER BY MOD(LEVEL, 10)) nolig FROM dual connect BY LEVEL <= 100 
    GROUP BY MOD(LEVEL, 10)
    ORDER BY num 
     
    NUM	NOLIG
    0	1
    1	2
    2	3
    3	4
    4	5
    5	6
    6	7
    7	8
    8	9
    9	10
    exemple avec ordre différent
    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
    SELECT MOD(LEVEL, 10)  num, row_number() OVER (ORDER BY MOD(LEVEL, 10)) nolig FROM dual connect BY LEVEL <= 100 
    GROUP BY MOD(LEVEL, 10)
    ORDER BY num desc
     
    NUM	NOLIG
    9	10
    8	9
    7	8
    6	7
    5	6
    4	5
    3	4
    2	3
    1	2
    0	1

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 937
    Points : 348
    Points
    348
    Par défaut
    Bonjour,
    desolé pour le retour tardif, j'ai tenté de faire comme ci après mais je n'ai pas réussi à avoir le résultat attendu,
    j'ai tenté la chose suivante :
    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
     
    Function ajoutColonne(feuille As String)
     
    Sheets(feuille).Activate  'on se deplace dans la feuille active , passé en parametre
    Columns(1).Insert  'insert une colonne
     
     
    Nb_Lignes = Range("B2000").End(xlUp).Row
     
    Dim numero As Integer
    numero = 1 'Numéro de départ (correspond ici au n° de ligne et au n° de numérotation)
    While numero <= Nb_Lignes
     
    Cells(numero, 1) = numero - 1
    numero = numero + 1
    Wend
     
     
    End Function
    j'ai réussi à avoir le résultat attendu, en fait j'ai compter le nombre de ligne puis en fonction du nombre de ligne, j'ai fais une numérotation en vba merci beaucoup !

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

Discussions similaires

  1. [phpMyAdmin] Afficher le numéros de ligne des champs
    Par Cube55 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 03/01/2007, 10h43
  2. Comment afficher les numéros de lignes ?
    Par dr23fr dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 05/07/2006, 10h35
  3. Réponses: 2
    Dernier message: 13/06/2006, 15h45
  4. [debutant] afficher les numéros de lignes
    Par ameliepim dans le forum MFC
    Réponses: 4
    Dernier message: 07/06/2006, 10h22
  5. Afficher le numéro de ligne dans une requete SELECT
    Par tilb dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/09/2004, 10h20

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