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

Langage SQL Discussion :

Lister des lignes inexistantes


Sujet :

Langage SQL

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut Lister des lignes inexistantes
    Bonjour,

    J'ai une table "Participants" avec les champs ID, Nom et Rang; je souhaite lister les participants par ex. jusqu'au 10ème rang, *y compris* quand il y a moins de 10 participants...

    Ex., si la table ne contient que ces données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ID	Nom	Rang
    1	Joe	3
    2	Jack	1
    3	William	4
    4	Averell	2
    Je voudrais tout de même lister 10 participants, comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Rang	Nom
    1	Jack
    2	Averell
    3	Joe
    4	William
    5	NULL
    6	NULL
    7	NULL
    8	NULL
    9	NULL
    10	NULL
    Comment faire, uniquement en SQL ?

  2. #2
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Autre

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Août 2011
    Messages : 50
    Points : 52
    Points
    52
    Par défaut
    Je vois pas vraiment l'intéret ... tu veux bien éclairer ma lanterne ?

    Pense a la caluse "union" mais faudra faire un test sur le nombre de lignes , et je vois aucun autre moyen a part une fonction PL/SQL.

    Bon courage.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Tu peux le faire avec une table des entiers (disons ici de 1 à 10) et une jointure externe.
    Mais comme Ded b, je n'en vois pas trop l'intérêt...

    Tatayo.

  4. #4
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Vous pouvez toujours faire une CTE récursive qui génère N lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    WITH cte AS
    (
      SELECT 1 AS nb
      UNION ALL
      SELECT nb+1 AS nb
        FROM cte
       WHERE cte.nb < 10
    )
    SELECT nb, nom
       FROM cte
                LEFT JOIN tabe t ON (t.rang = cte.nb)
    (Sous Oracle, utiliser connect by prior).

    EDIT : sur l'intérêt, c'est vrai qu'on peut se dire que ça serait le travail de l'application de générer ça. Cependant, j'ai déjà eu à faire ce genre de manip sous Oracle pour pouvoir générer directement du csv ou de l'excel au format souhaité en sortie par les utilisateurs ... Plutôt que faire du PL/SQL moche, utiliser les fonctions natives avec une requête qui sort directement le résultat attendu & formatté était quand même plus simple (à mon goût, bien sûr).

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Si la colonne "rang" est partie intégrante de la table, pas de soucis (mais dans ce cas le champs "nom" est vide !!!!). S'il faut le construire, faire des rangs sur des infos "NULL" ???

    Pour utiliser les 10 premières lignes, utilises
    SELECT FIRST 10
    ou

    SELECT ...
    Mais s'il y a moins de lignes, seules ces dernières seront affichées.
    Faire le complément avec le programme appelant
    Merci d'ajouter un sur les tags qui vous ont aidé

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut
    Passons sur l'intérêt de la chose, je pourrais facilement le faire depuis l'application mais le "client" demande à le faire en SQL uniquement.
    Rei Ichido, je vais tester ça...

  7. #7
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    bonjour
    essaye ceci, ça va rependre à ton besoin, j'attends un feedback

    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
    WITH cte AS
    (
     
    select 1	ID,'Joe'  	 Nom,3 Rang from dual union 
    select 2	ID,'Jack'	   Nom,1 Rang from dual union 
    select 3	ID,'William' Nom,	4 Rang from dual union 
    select 4	ID,'Averell' Nom,	2 Rang from dual  
     
    )
     
     
    select A.rang,B.nom
    from  (SELECT 0 + LEVEL as Rang,null id ,null nom
    FROM dual 
    CONNECT BY LEVEL <= 10) A left join  cte B on A.rang=B.rang
    order by  a.rang
     
     
    ;
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

Discussions similaires

  1. Compléter des lignes pour des valeurs inexistantes
    Par patgabjoe dans le forum SQL
    Réponses: 5
    Dernier message: 20/11/2012, 09h06
  2. Réponses: 5
    Dernier message: 11/06/2012, 13h58
  3. effacer des lignes, lister les id, modifier autre chose
    Par talvins dans le forum Requêtes
    Réponses: 5
    Dernier message: 27/04/2010, 14h00
  4. cmt lister des lignes en fonction du mois de la date
    Par Mihalis dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/04/2007, 12h29
  5. Réponses: 4
    Dernier message: 28/08/2006, 14h47

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