Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/05/2011, 17h36   #1
Nouveau Membre du Club
 
Inscription : septembre 2002
Messages : 138
Détails du profil
Informations personnelles :
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : septembre 2002
Messages : 138
Points : 38
Points : 38
Par défaut SQL server 2005 : left outer join

Bonjour,
J'ai un soucis avec une "left outer join"

Code :
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
backdraf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 17h47   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
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 :
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
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 17h50   #3
Nouveau Membre du Club
 
Inscription : septembre 2002
Messages : 138
Détails du profil
Informations personnelles :
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : septembre 2002
Messages : 138
Points : 38
Points : 38
MERCI aieeeuuuuu
je vais regarder de suite
backdraf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 18h04   #4
Nouveau Membre du Club
 
Inscription : septembre 2002
Messages : 138
Détails du profil
Informations personnelles :
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : septembre 2002
Messages : 138
Points : 38
Points : 38
MERCI
effectivement via cette solution cela fonctionne parfaitement.
MERCI
backdraf est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h48.


 
 
 
 
Partenaires

Hébergement Web