SQL : Sortir une ligne par identifiants

Résolu
Nicoyac -  
Sacha79 Messages postés 49 Statut Membre -
Bonjour,

Je travail actuellement sur SQL Server et je cherche à obtenir ce résultat :

TABLE DEPART TABLE ARRIVEE
id id2 modele id id2 modele
1 a toto 1 a toto
2 b titi 2 b titi
3 c papa 3 e tata
1 d dodo
3 e tata

En bref je souhaite sortir une ligne par "id" avec un tri décroissant sur modele mais je veux absolument avoir les autres champs dans le résultat.

Aujourd'hui j'arrive,

soit à sortir une table avec l'id uniquement mais pas les autres champs en faisant :

SELECT id
FROM TABLE DEPART
GROUP BY id

soit à sortie une table avec l'id et le modele mais celle-ci comporte encore les doublons sur id

SELECT DISTINCT id, modele
FROM TABLE DEPART
ORDER BY id, modele DESC

Auriez-vous une idée ? Merci d'avance et bonne journée,
Configuration: Windows XP
SQL SERVER
Internet Explorer 7.0

7 réponses

  1. Etranger
     
    Coucou !!
    J'ai pas vraiment tout compris mais si je te cite :

    Aujourd'hui j'arrive, soit à sortir une table avec l'id uniquement mais pas les autres champs en faisant :

    SELECT id
    FROM TABLE DEPART
    GROUP BY id

    Si tu veux les autres champs, t'as juste à écrire :

    SELECT *
    FROM TABLE DEPART
    GROUP BY id

    Non ??

    Bon courage !!
    0
    1. Nicoyac
       
      Etranger, merci pour ta réponse mais malheureusement les variables présentes dans la fonction d'agrégat (GROUP BY) doivent être présentes dans le select et donc cette requête ne fonctionne pas.

      Bonne journée,
      0
  2. Nicoyac
     
    Je me rend compte que la demande n'est pas très clair donc voici la table de départ et la table voulue en résultat :

    TABLE DEPART
    id--id2--modele
    1--a--toto
    2--b--titi
    3--c--papa
    1--d--dodo
    3--e--tata

    TABLE RESULTAT
    1--a--toto
    2--b--titi
    3--e--tata
    0
  3. Etranger
     
    hé bah alors :

    SELECT id, *
    FROM TABLE DEPART
    GROUP BY id

    toujours pas ca ??
    0
  4. lefadrine Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   11
     
    salut,
    je reprends un peu : tu as 2 tables, DEPART ET ARRIVEE.
    mais que veux-tu obtenir réellement, je n'ai pas bien compris ce que tu cherche à sortir...
    et qu'est ce que ton id2 ?
    arrivee.id1 = clé étrangère sur depart ?
    arrivee.id2 = clé étrangère sur depart?

    Explique et détaille nous plus précisément tes tables, tes champs, et donne peut-être un exemple de ce que tu souhaites obtenir comme résultats pour ta requête ;-)

    erratum : ah je crois que tu as été plus rapide que moi...
    0
    1. Etranger
       
      Je pense qu'il a une table DEPART et justement la table ARRIVEE c'est ce qu'il veut..
      0
    2. Nicoyac
       
      Alors,

      ETRANGER, ta deuxième proposition ne fonctionnera pas non plus et justement là est tout le problème :
      Si je fais "SELECT id FROM TABLE DEPART GROUP BY id", j'obtiens le bon dédoublonnage mais pas les bonnes infos. Et si je fais SELECT * FROM TABLE DEPART GROUP BY id, id2, modele", j'obtiens les bonnes infos mais pas le bon dédoublonnage (qui se fera sur les trois champs) !

      Concernant la question de LEFADRINE la table d'entrée a une double clé : id et id2 mais je cherche à dédoublonner uniquement sur id en prenant la première valeur de "modele" après tri, en l'occurence la syntaxe SQL de ce que je veux pourrais ressembler à cela mais cette syntaxe est fausse :

      SELECT *
      FROM TABLE DEPART
      GROUP BY id
      ORDER BY modele DESC
      0
      1. Nicoyac > Nicoyac
         
        Et au fait, merci à vous deux !
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lefadrine Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   11
     
    ah je vois ce que tu veux :
    tu veux obtenir pour un id donné la ligne qui a le modele le plus grand ?

    exemple :

    DEPART
    1 a abc
    1 b zzz

    RESULTAT
    1 a abc
    0
    1. Nicoyac
       
      Oui c'est ça sauf que dans ton exemple, le résultat souhaité est :

      RESULTAT
      1 b zzz (car 'zzz' est la valeur du modele la plus "grande" et b la valeur de 'id2' dont on ne tient pas compte)
      0
  7. lefadrine Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   11
     
    dans ce cas, tu as besoin d'une sous requete :

    SELECT * FROM arrivee
    WHERE modele IN (SELECT MAX(modele) FROM arrivee GROUP BY id);
    

    voilà ;)
    0
    1. Nicoyac
       
      Lefadrine,

      La requête que tu m'as indiqué ne me convient pas vraiment puisque les modèles se répétent souvent dans la table (non visible dans mon exemple). Pour mieux l'exprimer, les id correpondent à des personnes et le modèle à un véhicule. Si pour la personne 1 je sélectionne la veleur max soit par exemple 2CV alors avec cette requête je sortirai par la suite toutes les 2CV de la table.

      Par contre ta réponse m'a donné la solution en effet la requéte qui fonctionnera sera :
      SELECT MAX(Modèle), id
      FROM TABLE ENTREE
      GROUP BY id

      Merci à vous deux pour votre aide, à charge de revanche,

      Nicoyac
      0