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 server 2005 : left outer join


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut SQL server 2005 : left outer join
    Bonjour,
    J'ai un soucis avec une "left outer join"

    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
    SELECT 
    	T1.Affaire,
    	max(T1.[Code Ingénieur])AS Ingenieur,
    	sum(cast((T1.[Type A])AS float)) AS Montant_A,
    	sum(cast((T1.[Type B])AS float)) AS Montant_B,
    	sum(cast((T1.[Type C])AS float)) AS Montant_C,
    	sum(cast((T1.[Type D])AS float)) AS Montant_D,
    	sum(cast((T1.[Type A]+T1.[Type C]+T1.[Type D]+T1.[Type B complet])AS float)) AS Montant,
    	sum(cast(T2.[Présence Réel] as float)) as jours,
    	sum(cast((T1.[Type B])AS float))/sum(cast(T2.[Présence Réel] as float)) as TVXE
     
    FROM dbo.[societe$Statistiques] T1
    	left outer join dbo.[societe$Production Chantier] T2
    	on T1.Affaire = T2.[Document No_]
     
    WHERE T1.[Date Facture] BETWEEN '01/01/2011' and '31/03/2011'
     
    AND T1.[Type Document] < '2'
    and T2.No_ = 'PR'
    and T2.[Présence Réel] <> '0'
     
    group by T1.Affaire
    order by T1.Affaire;
    J'ai comme resultat les données de la :
    table 1 : dbo.[societe$Statistiques] T1 * table 2 :dbo.[societe$Production Chantier] T2
    c'est à dire si le resultat normal de
    Montant_A = 1000
    jours = 4
    Le resultat de la requete donne : 1000 * 4 = 4000 idem pour les autres lignes
    Avez vous une idée d'ou vient le probleme ?
    MERCI

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour

    Lorsque vous effectuez une jointure entre une Table A et une Table B, pour chaque ligne de la table B qui vérifie la condition de jointure, vous obtenez une ligne de résultat. La Ligne en question (celle de la table A) est donc dupliquée autant de fois qu'il y a de correspondance dans la table B. Une seule et meme ligne est donc prise en compte plusieurs fois par les fonctions d'agregat telle que SUM...

    vous pouvez faire la requête 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
    21
    22
    23
    24
     
    SELECT 
    	T1.Affaire,
    	max(T1.[Code Ingénieur])AS Ingenieur,
    	sum(cast((T1.[Type A])AS float)) AS Montant_A,
    	sum(cast((T1.[Type B])AS float)) AS Montant_B,
    	sum(cast((T1.[Type C])AS float)) AS Montant_C,
    	sum(cast((T1.[Type D])AS float)) AS Montant_D,
    	sum(cast((T1.[Type A]+T1.[Type C]+T1.[Type D]+T1.[Type B complet])AS float)) AS Montant,
    	T3.Jours,
    	sum(cast((T1.[Type B])AS float))/sum(cast(T2.[Présence Réel] AS float)) AS TVXE
     
    FROM dbo.[societe$Statistiques] T1
    OUTER APPLY (
    	SELECT sum(cast(T2.[Présence Réel] AS float)) AS jours
    	FROM dbo.[societe$Production Chantier] T2
    	WHERE T1.Affaire = T2.[Document No_]
     		AND T2.No_ = 'PR'
    		AND T2.[Présence Réel] <> '0'
    ) T3
    WHERE T1.[Date Facture] BETWEEN '01/01/2011' AND '31/03/2011'
    AND T1.[Type Document] < '2' 
    GROUP BY T1.Affaire
    ORDER BY T1.Affaire

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut
    MERCI aieeeuuuuu
    je vais regarder de suite

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut
    MERCI
    effectivement via cette solution cela fonctionne parfaitement.
    MERCI

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

Discussions similaires

  1. left outer join SQL/ODBC
    Par chidalife dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 17/06/2010, 09h49
  2. Requête SQL LEFT OUTER JOIN
    Par dam28800 dans le forum Langage SQL
    Réponses: 42
    Dernier message: 27/02/2009, 14h41
  3. [SSRS][2005][MDX] Left outer join en MDX
    Par geof dans le forum SSRS
    Réponses: 7
    Dernier message: 20/06/2008, 12h15
  4. concatenation de chaine dans un left outer join
    Par the_edge dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 11/11/2004, 16h08

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