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 :

[Débutant] DISTINCT sur une seule des colonnes ?


Sujet :

Langage SQL

  1. #1
    Membre éprouvé
    [Débutant] DISTINCT sur une seule des colonnes ?
    Salut à tous,

    je suis débutant dans l'utilisation du langage SQL et je l'utilise via C++ Builder 6 de Borland.

    Je dispose d'une table contenant différentes colonnes et particulièrement la colonne Catégorie.

    Le site de sqlPro j'ai découvert l'opérateur DISTINCT que l'on utilise avec SELECT.

    Je souhaiterais sélectionner toutes les colonnes de ma table mais appliquer l'opérateur DISTINCT uniquement sur la colonne Catégorie, mais je ne sais pas du tout comment faire !

    Merci d'avance pour votre aide !
    Neilos

  2. #2
    Expert éminent sénior
    ID CATEGORIE COULEUR
    ------------------------------------
    1 stylo bleu
    2 stylo rouge
    3 stylo vert
    sans autre info, si je te dis de faire un distinct sur categorie, quelle ligne tu prends ?


    T'en sais rien ? Et bien un SGBD n'est pas plus malin

  3. #3
    Membre éprouvé
    Ok donc ce que je veux faire n'est pas possible.

    Et si j'utilise l'opérateur DISTINCT avec toutes les colonnes je suppose que je ne serais pas assuré d'avoir toutes les valeurs que prend la colonne Catégorie ?
    Neilos

  4. #4
    Expert éminent sénior
    Mettez donc un exemple de ce que vous avez et ce que vous voulez, on verra alors ce que l'on peut faire

  5. #5
    Membre éprouvé
    Eh bien je dispose d'une table comme par exemple

    Index Cagégorie Nom Prénom
    -----------------------------------------------
    0 Privée Machin Bidule
    1 Bureau Directeur Truc
    2 Privée Pikachu Pokémon
    3 Enfants Dupont Dupont
    4 Enfants Intel Amd
    5 Privée Centrion XP Mobile

    Je voudrais pouvoir récupérer la liste des valeurs prises par le champ Catégorie tout en aillant accès aux autres champs...mais le problème du choix de quelle ligne prendre risque de tout bloquer...

    En résultat je voudrais par exemple :

    Index Cagégorie Nom Prénom
    -----------------------------------------------
    0 Privée Machin Bidule
    1 Bureau Directeur Truc
    3 Enfants Dupont Dupont

    mais avoir


    Index Cagégorie Nom Prénom
    -----------------------------------------------
    2 Privée Pikachu Pokémon
    4 Enfants Intel Amd
    1 Bureau Directeur Truc

    ne serait pas pour moi un problème !
    Neilos

  6. #6
    Expert éminent sénior
    c'est donc le dernier enregistrement de chaque catégorie ?

  7. #7
    Membre du Club
    As tu besoin des valeurs contenues dans les colonnes 'nom' et 'prénom' ?

  8. #8
    Membre éprouvé
    Salut,

    non ce n'est pas forcément le dernier enregistrement.

    Et non je n'ai pas besoin des valeurs dans Nom et Prénom mais j'ai besoin de la présence des champs (c'est beaucoup plus pratique...par rapport à l'interface).

    Merci de votre aide !
    Neilos

  9. #9
    Inactif  
    La première réponse d'orafrance résume tout.

    Les solutions qui s'offrent à toi nécessite de déterminer quelle ligne tu veux récupérer dans les groupes formées par les catégories.

    Une solution avec le plus grand index par catégorie:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Categorie, Nom, Prénom
    FROM laTable t1
    WHERE Index  = (SELECT MAX(INDEX) FROM laTable t2 WHERE t1.Categorie=t2.Categorie)


    Et si le pipeau ne te fait pas peur :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Categorie, MAX(Nom || ' ' || Prenom)
    FROM laTable
    GROUP BY Categorie
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  10. #10
    Membre éprouvé
    Merci beaucoup pour votre aide
    Tout fonctionne maintenant !
    Neilos