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 :

Tri à la source


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Tri à la source
    Bonjour,

    Je souhaite lister tous les nomptar (il y en existe plusieurs avec le mm noms) sans reprendre ceux qui ont le même idres.

    Le distinct et group by ne m'ont pas aidés.

    Si vous avez une idée...

    Merci,
    chseil

    Le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select distinct p.nomptar, ';', 
           p.x_ptar, ';', 
           p.y_ptar, ';', '(',
           l.idres, ')'
     from
        ptar p,
        ligne l    
     where l.idlig=p.idlig 
          and l.idres<4
          Order by p.nomptar;

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Un petit exemple s'il te plait, parce que je ne comprends pas bien la question...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Le DISTINCT va s'appliquer sur toutes les colonnes de la table. Comme parmi celles-ci il y en a une qui vient de la table 'lignes', en fait le distinct ne sert plus à rien et va retourner potentiellement plusieurs lignes pour chaque 'nomptar'.

    Au pasage, la syntaxe normalisée depuis 1992 pour les jointures utilise le mot clé JOIN, il serait peut-être temps de s'y mettre au bout de 17 ans !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Le DISTINCT va s'appliquer sur toutes les colonnes de la table. Comme parmi celles-ci il y en a une qui vient de la table 'lignes', en fait le distinct ne sert plus à rien et va retourner potentiellement plusieurs lignes pour chaque 'nomptar'.
    C'est justement ce que je souhaite éviter, remonter plusieurs lignes avec le même 'nompart'

    Citation Envoyé par CinePhil Voir le message
    Au pasage, la syntaxe normalisée depuis 1992 pour les jointures utilise le mot clé JOIN, il serait peut-être temps de s'y mettre au bout de 17 ans !
    Le système que j'utilise n'est pas actualisé donc on travaille "à l'ancienne"...

    Exemple de résultat :

    Nom : Image1.jpg
Affichages : 51
Taille : 9,9 Ko

    Résultat souhaité :

    Nom : trivoulu.jpg
Affichages : 43
Taille : 7,0 Ko

    Si cela peux aider...

    Merci

    chseil

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Quelle règle appliquez vous pour choisir le résultat souhaité ?

    Un des lignes au hasard ?

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    1 nomptar avec Xptar et Yptar pour chaque idres

    Merci,

    chseil

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par chseil Voir le message
    1 nomptar avec Xptar et Yptar pour chaque idres
    Je suis désolé mais ça ne veut rien dire.

    Pour chaque nomptar, pour chaque idres, comment choisissez-vous le couple (Xptar, Yptar) ?

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    on a 3 types d'idres qui contiennent des nomptar ayant chacun Un couple Xpatr et Yptar.

    Le "hic" c'est que certains nomptar existent plusieurs fois dans un idres.

    Je cherche a extraire pour chaque idres la liste des nomptar (sans doublons) avec son Xptar et Yptar

    merci
    chseil

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Ca n'avance pas, mais on va y arriver.
    Pour l'idres = 1, vous avez dans votre table de départ deux lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TOTO    123456    369852
    TOTO    456789    258711
    Pourquoi voulez-vous en sortie la ligne
    plutôt que la ligne.
    Qu'est-ce qui vous fait choisir l'une par rapport à l'autre ?

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Je te remercie de tes efforts.

    Je choisis la première arbitrairement.
    Il ne me faut qu'une seule ligne "TOTO 123456 369852" par idres.

    Merci
    chseil

    PS : tu peux me tutoyer...

  11. #11
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Ok merci ! C'est une mauvaise règle, mais au moins c'est une règle !
    Afin d'adapter la syntaxe, quel est votre SGBD ?

    (En public je vouvoie, en privé je tutoie, n'y voyez rien de personnel)

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Ben, je suis d'accord, mais il ne me faut q'1 monptar alors...

    SGBD : Oracle

  13. #13
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Ok, voilà une requête avec vos tables :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    with ptar as
    (
    select 'TOTO' as nomptar, 123456 as x_ptar, 369852 as y_ptar, 1 as idlig from dual union all
    select 'TOTO'           , 456789          , 258711          , 2          from dual union all
    select 'TOTO'           , 7898123         , 147852          , 3          from dual union all
    select 'TOTO'           , 456123          , 258963          , 4          from dual union all
    select 'TOTO'           , 789456          , 789123          , 5          from dual
    ),  ligne as
    (
    select 1 as idlig, 1 as idres from dual union all
    select 2         , 1          from dual union all
    select 3         , 2          from dual union all
    select 4         , 2          from dual union all
    select 5         , 3          from dual
    )
      select sr.nomptar,
             sr.x_ptar,
             sr.y_ptar,
             sr.idres
        from
            (
            select
                p.nomptar, 
                p.x_ptar, 
                p.y_ptar,
                l.idres,
                row_number() over(partition by p.nomptar, l.idres order by null) as rk
            from
                ptar p
                inner join ligne l    
                  on l.idlig = p.idlig 
            where 
                l.idres < 4
            ) sr
       where sr.rk = 1
    order by sr.nomptar ASC,
             sr.idres   ASC;
     
    NOMPTAR X_PTAR	Y_PTAR	IDRES
    TOTO	123456	369852	1
    TOTO	7898123	147852	2
    TOTO	789456	789123	3
    Notez bien que cette même requête peut vous donner des résultats différents à chaque exécution.

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Parfait , grand merci a toi, tu merites bien ton titre d'expert....

    Chseil (qui te remercie encore)

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/12/2007, 09h57
  2. [2.0] Différents tri sur la même source de données
    Par Drahas dans le forum Accès aux données
    Réponses: 4
    Dernier message: 14/11/2006, 19h48
  3. Réponses: 8
    Dernier message: 13/01/2006, 11h35
  4. syntaxe : tri d'un formulaire avec source
    Par arcane dans le forum Access
    Réponses: 1
    Dernier message: 06/01/2006, 11h13

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