Jointure : ne renvoie pas tous les enregistrements [Résolu]

Messages postés
10
Date d'inscription
jeudi 26 février 2009
Dernière intervention
16 avril 2012
- - Dernière réponse : cs_Sieurcoug
Messages postés
10
Date d'inscription
jeudi 26 février 2009
Dernière intervention
16 avril 2012
- 16 avril 2012 à 12:09
Bonjour à tous,

J'ai 4 tables et je souhaite en faire une synthèse. La colonne SI est en quelque sorte le champ "pivot".
Pour un SI donné, il peut y avoir des dossiers sur une période, mais des fois 0.

Problème : Si t1.SI est vide (s'il n'y a pas de dossiers pour ce SI sur la période 1), il ne renvoie pas les autres enregistrements des autres périodes.

J'ai ajouté des ISNULL sur SI dans la première ligne, qui améliore les choses, mais ca duplique les SI dans la première colonne du résultat.

SELECT 	ISNULL(t1.SI, ISNULL(t2.SI, ISNULL(t3.SI, t4.SI))),
ISNULL(t1.NbDossiers, 0) AS 'NB Dossiers Période 1',
ISNULL(t2.NbDossiers, 0) AS 'NB Dossiers Période 2',
ISNULL(t3.NbDossiers, 0) AS 'NB Dossiers Période 3',
ISNULL(t4.NbDossiers, 0) AS 'NB Dossiers Période 4'
FROM	#tmpNBDossiers_PeriodeMoins1 t1
FULL OUTER JOIN	#tmpNBDossiers_PeriodeMoins2 t2
ON t1.SI = t2.SI
FULL OUTER JOIN	#tmpNBDossiers_PeriodeMoins3 t3
ON t1.SI = t3.SI
FULL OUTER JOIN	#tmpNBDossiers_PeriodeMoins4 t4
ON t1.SI = t4.SI
ORDER BY t1.NbDossiers DESC



Comment devrait être écrite cette requête selon vous ?
Merci à vous
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
124
Date d'inscription
mercredi 23 novembre 2005
Dernière intervention
19 septembre 2013
3
3
Merci
Bonjour,

Une solution est faire dans une sous requête une synthèse de tous les SI présents dans les 4 tables ex :
SELECT DISTINCT SI FROM t1
UNION SELECT DISTINCT SI FROM t2
UNION SELECT DISTINCT SI FROM t3
UNION SELECT DISTINCT SI FROM t4

Insérer cette sous requête dans la requête principale :

SELECT ...
FROM
(SELECT DISTINCT SI FROM t1
UNION SELECT DISTINCT SI FROM t2
UNION SELECT DISTINCT SI FROM t3
UNION SELECT DISTINCT SI FROM t4) A
LEFT JOIN #tmpNBDossiers_PeriodeMoins1 t1 ON A.SI = t1.SI
LEFT JOIN #tmpNBDossiers_PeriodeMoins2 t2 ON A.SI = t2.SI
LEFT JOIN #tmpNBDossiers_PeriodeMoins3 t3 ON A.SI = t3.SI
LEFT JOIN #tmpNBDossiers_PeriodeMoins4 t4 ON A.SI = t4.SI

Yann

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 117 internautes nous ont dit merci ce mois-ci

Commenter la réponse de tri_yann
Messages postés
10
Date d'inscription
jeudi 26 février 2009
Dernière intervention
16 avril 2012
0
Merci
Super !
Merci Yann pour ta réponse !
Commenter la réponse de cs_Sieurcoug

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.