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

Requêtes et SQL. Discussion :

Garder l'ordre des Records dans une requete select distinct


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 80
    Points : 53
    Points
    53
    Par défaut Garder l'ordre des Records dans une requete select distinct
    Bonsoir le Forum,

    J'ai une requete avec SELECT DISTINCT
    Comment faire pour qu'il garde le meme ordre des records qui se trouve dans la table sans qu'il ne trie d'office sur le premier champs du SELECT


    Merci d'avance pour vos réponses

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Est-ce que dans ta table tu as un moyen d'avoir l'ordre de tri (clé primaire) , si c'est le cas, il faut utiliser Order By.

    Mais il te faut aboslument une référence

    Starec

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 80
    Points : 53
    Points
    53
    Par défaut
    Bonjour Starec,

    Merci pour ta réponse

    Non justement le probleme c'est que si je mets une clé primaire avec par ex un champs avec numerotation automatique, le DISTINCT ne sert plus à rien car si je fais un order by sur cette clé, je suis obligé de l'ajouter dans la clause SELECT DISTINCT et je me retrouve avec mes doublons....
    Merci pour ta réponse

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re

    Si tu n'as pas de repère dans ta table je ne vois pas comment faire, désolé.

    Starec

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 80
    Points : 53
    Points
    53
    Par défaut
    Re,

    Bhein oui c'est bien ce que je me dis mais c'est bien dommage que quand c'est un select distinct, il retrie automatiquement les records...

  6. #6
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 910
    Points : 4 808
    Points
    4 808
    Par défaut
    Une remarque sans doute inutile :
    On peut penser que parmi les champs du GROUP By , il y en ait un qui puisse intéresser l'utilisateur pour le classement...

    Bonne journée

  7. #7
    J1
    J1 est déconnecté
    Membre averti Avatar de J1
    Inscrit en
    Mai 2004
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 321
    Points : 335
    Points
    335
    Par défaut
    En reprenant l'idée d'un champ avec numéro auto-incrémenté, qu'on appellerait par exemple id, on pourrait imaginer ça :

    Requête originale de dédoublonnage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT c1, c2
    FROM test
    Requête de dédoublonnage respectant l'"ordre" de la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT c1, c2
    FROM test
    GROUP BY c1, c2
    ORDER BY MIN(id)
    A tester bien sûr !

  8. #8
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 910
    Points : 4 808
    Points
    4 808
    Par défaut
    Cette requete doit le faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [noArticle], [nomArticle], [libArticle]
    FROM t_article
    WHERE noArticle IN   ( SELECT min(B.noArticle) FROM  t_article as  B GROUP BY  B.nomArticle,B.libArticle  )
    ORDER BY [noArticle];
    ... mais risque d'être un peu gourmande sur des grosses tables
    Bonne journée

    EDIT : noArticle est une clé primaire en num Auto ...

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 80
    Points : 53
    Points
    53
    Par défaut
    Re,

    Merci pour vos réponses...

    J1, J'ai testé mais le champs id doit etre dans la clause GROUP BY

    micniv, Ca marche nickel , un grand merci, tu me sors une grosse épine hors du pied. Pas de probleme pour les grosses tables j'effectue cette requete sur une table temp

  10. #10
    J1
    J1 est déconnecté
    Membre averti Avatar de J1
    Inscrit en
    Mai 2004
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 321
    Points : 335
    Points
    335
    Par défaut
    Citation Envoyé par pobrouwers
    J1, J'ai testé mais le champs id doit etre dans la clause GROUP BY
    Comme ça m'étonnait, je viens de tester de mon côté. Chez moi, ça marche.

    En partant de la table test ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    id c1 c2
    -- -- --
    1  2  100
    2  1  10
    3  1  10

    Ma requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT c1, c2 
    FROM test 
    GROUP BY c1, c2 
    ORDER BY MIN(id)
    retourne bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    c1 c2
    -- --
    2  100
    1  10
    En adaptant ma requête à ton cas de figure, tu n'aurais pas ajouté le champ id dans ton SELECT par hasard ?

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 80
    Points : 53
    Points
    53
    Par défaut
    Re J1,

    Effectivement, je viens de réessayer et cela fonctionne, c'est que j'ai du laisser id dans la clause SELECT
    Merci pour tes recherches et ta réponse.
    Bonne soirée

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

Discussions similaires

  1. Format des chifres dans une requete SELECT
    Par Marc_27 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2009, 16h59
  2. [Débutant]Ordre des champs dans une table
    Par goony dans le forum Débuter
    Réponses: 4
    Dernier message: 16/02/2006, 12h05
  3. Ne pas tenir compte des accents dans une requete
    Par zamanika dans le forum Installation
    Réponses: 8
    Dernier message: 08/11/2004, 19h49
  4. [Portal 9iAS] : ordre des items dans une région
    Par melitta dans le forum Oracle
    Réponses: 8
    Dernier message: 21/10/2004, 14h01
  5. Ordre des champs dans une table
    Par patapetz dans le forum Outils
    Réponses: 5
    Dernier message: 30/07/2003, 06h53

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