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

MS SQL Server Discussion :

[SQL2K] jointure partielle avec un max


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Par défaut [SQL2K] jointure partielle avec un max (maj)
    edit : la quetion maj se trouve plus bas sur cette page


    bonjour, je ne trouve pas de manière simple d'écrire ce type de jointure :

    table TBL_A(A_ID, A_ATTRIB)
    table TBL_B(B_ID, B_ATTRIB)
    table J_A_B(A_ID, B_ID, DTE_J)

    je dois sortir les données selon le modèle :
    A_ATTRIB, DTE_LAST, B_ATTRIB où DTE_LAST est la DTE_J la plus élevée pour chaque couple A_ATTRIB, B_ATTRIB, sachant que c'est un left join (donc je n'ai pas de ligne dans J_A_B pour chaque A_ID

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select A_ATTRIB, DTE_J, B_ATTRIB
    from TBL_A
    left join J_A_B
    on TBL_A.A_ID = J_A_B.A_ID
    left join TBL_B
    on TBL_B.B_ID = J_A_B.B_ID
    group by A_TTRIB
    having DTE_J...
    Et à par faire tout plein de sous-requêtes, je ne vois pas...

    Quelqu'un aurait-il une proposition s'il-vous-plait ?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Par défaut
    Bonjour,

    je n'ai pas du tout comprendre car si tu n'as pas de lignes dans J_A_B pour un A_ID, comment peux-tu sortir le max de la date ? Puisque tu n'as pas de date.

    Du coup, c'est une requete simple. Si elle ne convient pas, merci de donner un exemple numérique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    select A.A_ATTRIB, B.B_ATTRIB, MAX(D.DTE_J) DTE_LAST
    FROM J_A_B D INNER JOIN TBL_A A ON D.A_ID = A.A_ID
    INNER JOIN TBL_B B ON D.B_ID = B.B_ID
    GROUP BY A.A_ATTRIB, B.B_ATTRIB

  3. #3
    Membre éclairé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Par défaut
    ha, effectivement, je ne vois pas comment je n'ai pas trouvé ça et me suis embarqué dans des trucs si compliqués. Celà étant, je pense que ce ne sont pas des inner join mais des left outer join que je dois utiliser si je veux un résultat de ce type :

    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
     
    TBL_A
    A_ID A_TTRIB
    1      A1
    2      A2
    3      A3
    4      A4
    ------------------------------
    TBL_B
    B_ID B_ATTRIB
    1      B1
    2      B2
    ------------------------------
    J_A_B
    A_ID B_ID DTE_J
    1       1     20061010
    1       1     20060102
    1       1     20051210
    2       1     20040203
    2       2     20060503
    4       1     20050101
    ------------------------------
    résultat :
    A_TTRIB B_ATTRIB, DTE_J
    1           1             20061010
    2           2             20060503
    3           NULL        NULL
    4           1             20050101
    Maintenant, question subsidiaire : la même chose, mais sans renvoyer la date. Est-ce possible ? Je pense que c'est ce qui m'a poussé à faire du trop compliqué. Juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    A_ATTRIB, B_ATTRIB
    1              1
    2              2
    3              NULL
    4              1
    (ce qui est terrible, c'est que je ne peux même pas essayer avant de retourner au boulot)

  4. #4
    Membre éclairé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Par défaut
    J'ai fini par identifier mon problème réel, finalement... Souvent, le plus dur est de trouver la bonne question ;o)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    table TBL_A(A_ID, A_ATTRIB)
    table TBL_B(B_ID, B_ATTRIB)
    table J_A_B(A_ID, B_ID, DTE_J, JAB_ATTRIB)
    et je dois sortir quelque chose de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A_ATTRIB, DTE_J, max(B_ATTRIB), JAB_ATTRIB
    group by A_TTRIB, DTE_J
    ou JAB_ATTRIB n'est pas "groupé", mais est celui qui correspond à la date en question.

Discussions similaires

  1. [V6] Pb création jointure ouverte avec critère MAX
    Par CathJob54 dans le forum Designer
    Réponses: 4
    Dernier message: 04/09/2013, 16h07
  2. jointure gauche avec fonction max
    Par nicoaix dans le forum Requêtes
    Réponses: 6
    Dernier message: 13/05/2011, 16h35
  3. [SQL] jointure externe avec 3 tables, comment faire ....
    Par grumbok dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/08/2005, 16h13
  4. jointure externe avec un where, me pose problème!
    Par Danae dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/07/2005, 17h37
  5. Jointure hétérogène avec Interbase ?
    Par lecrennois dans le forum InterBase
    Réponses: 1
    Dernier message: 25/10/2004, 16h51

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