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 :

SQL JOIN GROUP BY [2017]


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2012
    Messages : 136
    Par défaut SQL JOIN GROUP BY
    Bonjour

    J'ai deux tables que je veux joindre avec les données suivantes

    Table 1 - colonne et données
    id_ajust - num_int - num_tran - num_pds - cod_cons - cod_ges - cod_porte - dat_ref
    10002 811 21115 516321 XZS178t ASD34 129 2023-04-16
    10003 811 21345 91754 CVB789 123ASD 109 2023-04-16

    Table 2 - colonne et données
    dat_debut dat_fin num_int num_tran num_pds cod_lien num_pro num_fil
    2021-01-12 2079-01-01 811 000023 78965 1 NULL NULL
    2021-04-12 2079-01-01 811 21115 516321 NULL NULL 7890
    2021-04-12 2079-01-01 811 21115 516321 NULL NULL 7890
    2021-01-12 2079-01-01 811 21345 91754 1 4567 890
    2021-01-12 2079-01-01 811 21345 91754 1 2345 890
    2021-01-12 2079-01-01 811 21345 91754 NULL NULL 9087

    Je dois joindre les deux tables, je veux ajouter à la table 1 les données suivantes de la table 2 num_pro et num_fil et les variables suivantes comme jointure num_int, num_tran et num_pds

    Je dois sélectionner les données de la façon suivante puisque que j'ai plus qu'un ligne qui se joint à la table 1.
    La date_ref (table 1) doit être BETWEEN dat_debut et dat_fin de la table 2.
    Le cod_lien (peut être NULL ou 1) je prioriser la valeur 1 et ensuite NULL si aucun de valeur 1 et
    ensuite prendre celui qui a le min(num_pro)

    Voici la requête que j'ai trouvé jusqu'à maintenant mais elle ne fait pas tout
    Je fais la jointure et extrait le cod_lien MAX


    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT DISTINCT mtr.*, tmp.num_pro, tmp.num_fil, tmp.cod_nature_lien
    FROM table_2 tmp
    RIGHT JOIN table_1 mtr
    ON tmp.num_tran = mtr.num_tran
    AND tmp.num_int = mtr.num_int
    AND tmp.num_pds = mtr.num_pds
    AND tmp.cod_lien = (
           SELECT MAX(tmp2.cod_lien)
           FROM table_ 2 tmp2
           WHERE tmp2.num_int = tmp.num_int
           AND tmp2.num_tran= tmp.num_tran
           AND tmp2.num_pds = tmp.num_pds
           GROUP BY tmp2.num_int, tmp2.num_tran, tmp2.num_pds)



    Merci de votre aide

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 625
    Billets dans le blog
    10
    Par défaut
    Bonjour

    Quelque chose comme ceci :

    Code SQL : 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
    select distinct
           T1.id_ajust
         , T1.num_int
         , T1.num_tran
         , T1.num_pds
         , T2.num_fil
    from T1
    left join T2
       on T2.num_int =T1.num_int
      and T2.num_tran=T1.num_tran
      and T2.num_pds =T1.num_pds
      and T1.dat_ref between T2.dat_debut and T2.dat_fin
      and T2.cod_lien = 
         (select max(coalesce(cod_lien, 0))
          from T2 as S2
          where S2.num_int =T1.num_int
            and S2.num_tran=T1.num_tran
            and S2.num_pds =T1.num_pds
            and T1.dat_ref between S2.dat_debut and S2.dat_fin
         )

  3. #3
    Membre confirmé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2012
    Messages : 136
    Par défaut Rep : ne va pas chercher le MIN(num_pro)
    Merci pour la réponse le seul problème c'est qu'il ne va pas chercher le MIN(num_pro) il extrait deux transaction au lieu de seulement une si je prends seulement ce cas.

    En premier il extrait les transactions qui sont dans l'intervalle de date ensuite prend le MAX(cod_lien) qui reste les deux premières transaction de la table 2 ensuite parmi les deux il doit sélectionner celle que le MIN(num_pro)


    Table 1 - colonne et données
    id_ajust - num_int - num_tran - num_pds - cod_cons - cod_ges - cod_porte - dat_ref
    10003 811 21345 91754 CVB789 123ASD 109 2023-04-16

    Table 2 - colonne et données
    dat_debut dat_fin num_int num_tran num_pds cod_lien num_pro num_fil
    2021-01-12 2079-01-01 811 21345 91754 1 4567 890
    2021-01-12 2079-01-01 811 21345 91754 1 2345 890
    2021-01-12 2079-01-01 811 21345 91754 NULL NULL 9087

    Merci et bonne journée

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 625
    Billets dans le blog
    10
    Par défaut
    Pardon, j'avais mal lu l'énoncé.

    Du coup ça donne :

    Code SQL : 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
    select 
           T1.id_ajust
         , T1.num_int
         , T1.num_tran
         , T1.num_pds
         , T2.cod_lien
         , min(T2.num_pro)
    from T1
    left join T2
       on T2.num_int =T1.num_int
      and T2.num_tran=T1.num_tran
      and T2.num_pds =T1.num_pds
      and T1.dat_ref between T2.dat_debut and T2.dat_fin
      and T2.cod_lien = 
         (select max(coalesce(S2.cod_lien, 0))
          from T2 as S2
          where S2.num_int =T1.num_int
            and S2.num_tran=T1.num_tran
            and S2.num_pds =T1.num_pds
            and T1.dat_ref between S2.dat_debut and S2.dat_fin
         )
    group by T1.id_ajust
           , T1.num_int
           , T1.num_tran
           , T1.num_pds
           , T2.cod_lien

  5. #5
    Membre confirmé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2012
    Messages : 136
    Par défaut Comment
    Merci beaucoup fonctionne super bien !!!

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

Discussions similaires

  1. SQL JOIN GROUP BY : le melange ne colle pas
    Par french-petzouille dans le forum Requêtes
    Réponses: 10
    Dernier message: 11/10/2007, 14h02
  2. Sql Access : Group By
    Par rstephane dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 01/06/2006, 10h34
  3. Création d'une vue sous SQL Server - group by complexe
    Par csembeil dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 12/01/2006, 16h17
  4. [sql 9i] group by par années ;)
    Par booth dans le forum Oracle
    Réponses: 7
    Dernier message: 04/10/2005, 10h42
  5. [SQL] Jointure,Group BY et ORDER BY COUNT qui marche pas
    Par Stef784ever dans le forum Langage SQL
    Réponses: 8
    Dernier message: 17/08/2005, 12h28

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