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

Langage SQL Discussion :

[SQL Server 8] Discussion : Full Jointure sur trois tables


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut [SQL Server 8] Discussion : Full Jointure sur trois tables
    Bonjour!

    J'utilise SQL-8!

    Je n'ai pas de problème, je voulais juste discuter sur ma méthode pour joindre trois tables! Je m'interrogeais ce matin si j'utilisais la meilleure approche!

    Alors voici.

    J'ai trois tables avec une clé identique mais évidemment des valeurs bien différentes :

    #Tmp1 (période, quantite)
    #Tmp2 (période, quantite)
    #Tmp3 (période, quantite)

    J'ai simplifié ma clé mais elle est composé de trois champs dans les faits réels.

    Pour chaque table je peux avoir des quantités pour certaines périodes mais pas toutes. Je ne peux donc pas me baser sur une table en particulier pour faire mes jointures. Parfois, une des tables est même vide. Et voilà, je veux joindre le tout pour ne former qu'une seule table qui permet d'obtenir la sommation des quantités pour chaque période.

    Présentement, je le fais avec deux requêtes. Je joins #Tmp1 avec #Tmp2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select case when a.periode is null then b.periode else a.periode end as periode,	
           case when a.quantite is null then b.quantite
    		  when b.quantite is null then a.quantite
    		  else a.quantite + b.quantite end as Quantite
    into #Tmp12
    from #Tmp1 a
    	full join #Tmp2 b on (a.periode = b.periode )
    Puis, je joins le résultat de cette requête avec ma table temporaire troisième :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select case when a.periode is null then b.periode else a.periode end as c1per,	
    	case when a.quantite is null then b.quantite
    		  when b.quantite is null then a.quantite
    		  else a.quantite + b.quantite end as Quantite
    into #TmpFinal
    from #Tmp12 a
    	full join #Tmp3 b on (a.periode = b.periode )
    Avez vous d'autres suggestion qui seraient mieux ou plus efficace?

    Merci!

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Si j'ai bien compris je pense qu'il faudrait utiliser des unions et des regroupements. Je ne connais pas ton SGBD mais dans l'esprit ce serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT période as P, sum(quantite) as QTOTAL
    FROM (	SELECT période, quantite FROM #Tmp1
    		UNION
    		SELECT période, quantite FROM #Tmp2
    		UNION
    		SELECT période, quantite FROM #Tmp3
    	) TUNION
    GROUP BY P

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 387
    Points
    28 387
    Par défaut
    Avec une toute petite correction, ça marchera encore mieux...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT période as P, sum(quantite) as QTOTAL
    FROM (    SELECT période, quantite FROM #Tmp1
            UNION ALL
            SELECT période, quantite FROM #Tmp2
            UNION ALL
            SELECT période, quantite FROM #Tmp3
        ) TUNION
    GROUP BY P

  4. #4
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut
    Arf j'avais oublié d'écrise mon SGBG, je viens de corriger mon post, c'est SQL-8. Vraiment désolé.

    Je regarde votre réponse et je me trouve vraiment nulle de ne pas y avoir pensé. C'est cela qu'on appelle l'expérience qui rentre?

    Merci c'est parfait et évidemment mieux que ce que je faisais!

  5. #5
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut
    Je pense que je vais ajouter mon SGBD dans ma signature, ainsi plus de confusion!

  6. #6
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par Baquardie
    Je pense que je vais ajouter mon SGBD dans ma signature, ainsi plus de confusion!
    Dans ce ca, autant mettre "SQL Server 8", ça sera plus clair
    (SQL n'est pas un SGBD, mais un langage )

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

Discussions similaires

  1. Requete SQL avec jointure sur trois tables
    Par pit2121 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 19/05/2008, 23h07
  2. Requête SQL avec jointure sur trois tables
    Par pit2121 dans le forum SQL
    Réponses: 0
    Dernier message: 19/05/2008, 20h24
  3. Jointure sur trois tables
    Par user126 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/02/2008, 17h07
  4. Réponses: 16
    Dernier message: 14/04/2006, 18h38
  5. jointure sur TROIS tables
    Par caribou_belle dans le forum Langage SQL
    Réponses: 8
    Dernier message: 01/03/2004, 11h20

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