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

Développement SQL Server Discussion :

Afficher une colonne en fonction du max d'une autre


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 23
    Points : 29
    Points
    29
    Par défaut Afficher une colonne en fonction du max d'une autre
    Bonjour,
    Voilà j'ai une table qui contient 3 colonnes: id_ordre, num_ordre, id_objet
    la cles primaire c'est id_ordre qui est un index,
    pour un id_objet donnée je peux avoir plusieurs id_ordre.
    num_ordre n'est normalement rien d'autre que le Xieme ordre d'un objet, donc en toute bonne logique je ne peux pas avoir quelque chose comme ça:

    id_ordre num_ordre id_objet
    ...
    4028762 1 4490882
    4031231 3 4491438
    4031236 1 4491438
    ...

    puisque 4031231 est < 4031236, cela étant j'ai ces données en base.
    ce que je veux donc c'est faire une requete qui me retourne pour chaque id_objet l'id_ordre du num_ordre max
    J'ai fait cette requete mais ca ne va pas car elle me retourne l'id_ordre max et le num_ordre max de l'id_objet mais pas l'id_ordre du num_ordre max

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select max(id_ordre), max(num_ordre), id_objet
    from MaTable
    where id_objet is not null
    group by id_objet
    une idée de comment faire?

  2. #2
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    regarde du côté de la fonction

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ROW_NUMBER() OVER (PARTITION BY champ ORDER BY Champ ) AS Classement

    Et pourrais tu mettre ton code dans les balises pour une question de clarté dans la lecture, merci

    Cordialement,
    Lyche
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  3. #3
    Membre averti
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : R&D

    Informations forums :
    Inscription : Avril 2004
    Messages : 127
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par tengac Voir le message
    Bonjour,
    Voilà j'ai une table qui contient 3 colonnes: id_ordre, num_ordre, id_objet
    la cles primaire c'est id_ordre qui est un index,
    pour un id_objet donnée je peux avoir plusieurs id_ordre.
    num_ordre n'est normalement rien d'autre que le Xieme ordre d'un objet, donc en toute bonne logique je ne peux pas avoir quelque chose comme ça:

    id_ordre num_ordre id_objet
    ...
    4028762 1 4490882
    4031231 3 4491438
    4031236 1 4491438
    ...

    puisque 4031231 est < 4031236, cela étant j'ai ces données en base.
    ce que je veux donc c'est faire une requete qui me retourne pour chaque id_objet l'id_ordre du num_ordre max
    J'ai fait cette requete mais ca ne va pas car elle me retourne l'id_ordre max et le num_ordre max de l'id_objet mais pas l'id_ordre du num_ordre max

    une idée de comment faire?
    En espérant que la couple (num_ordre, id_objet) est une autre clé sinon il n'y a pas de solution sans y rajouter les colonnes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT 
      t1.id_ordre,
      t1.num_ordre,
      t1.id_objet
    FROM 
      MaTable AS t1
      INNER JOIN
      (
        SELECT max(num_ordre) AS max_num_ordre, id_objet
        FROM MaTable
        GROUP BY id_objet
      ) AS t2
        ON t1.num_ordre = t2.max_num_ordre
           AND t1.id_objet = t2.id_objet

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 23
    Points : 29
    Points
    29
    Par défaut
    Déolé pour les balises de code , je ferais gaffe la prochaine fois.
    Lyche : je vais tester ta solution.
    Serguei_TARASSOV : j'ai fais comme ca

    merci

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/03/2012, 15h04
  2. Réponses: 2
    Dernier message: 17/03/2011, 21h45
  3. Réponses: 2
    Dernier message: 21/09/2010, 18h19
  4. remplissage automatique d'une colonne en fonction du contenu d'une autre
    Par renton59 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/09/2010, 18h36
  5. [VxiR2] Comment afficher une valeur en fonction du max d'une autre valeur
    Par mp.giraud dans le forum Deski
    Réponses: 3
    Dernier message: 06/05/2009, 16h58

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