[Oracle 10g] Combinaison de RIGHT et INNER joins
Bonjour
Ca a l'air d'un probleme classique, mais je ne trouve rien sur le forum...
Dans un datawarehouse, nous avons 3 tables liées par un right join et un inner join et les resultats ne sont pas bons.
On souhaite avoir toutes les valeurs de la dimension (MD=master data), meme si elles n'ont pas de ligne correspondante dans la table de fait (FACT) : dans ce cas le total affiché sera NULL.
(1) Query donnant des resultats partiels : le outer join ne semble pas fonctionner car on obtient la meme chose que si l'on fait un INNER JOIN entre MD et FACT, c'est a dire seulement les dimensions avec des lignes dans FACT
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| SELECT
MD.DIMENSION, sum(fact.TOTALEURO)
FROM
T1_FACT fact
RIGHT OUTER JOIN V1_MASTERDATA MD
ON (MD.DIMENSION=FACT.DIMENSION)
INNER JOIN V1_CALENDAR CAL
ON (FACT.IDFISCALYEAR= CAL.NOYEAR and
FACT.IDFISCALMONTH=CAL.NOMONTH)
WHERE
CAL.NOMONTH = 04 AND CAL.NOYEAR = 2011
GROUP BY MD.DIMENSION |
(2) Query donnant des resultats corrects (les valeurs de MD.DIMENSION sans TOTALEURO sont affichees) :
Code:
1 2 3 4 5 6 7 8 9 10
| SELECT
MD.DIMENSION, sum(fact.TOTALEURO)
FROM
(SELECT * FROM T1_FACT fact ,V1_CALENDAR CAL
where FACT.IDFISCALYEAR= CAL.NOYEAR and
FACT.IDFISCALMONTH=CAL.NOMONTH AND
CAL.NOMONTH = 04 AND CAL.NOYEAR = 2011) F
RIGHT OUTER JOIN V1_MASTERDATA MD
ON (MD.DIMENSION=F.DIMENSION)
GROUP BY MD.DIMENSION |
Comme la query est générée par BO, on doit trouver une autre solution car one ne peut pas la réécrire telle qu'en (2), mais j'aimerais d'abord comprendre pourquoi cela ne fonctionne pas.
A noter : V1_CALENDAR est une vue sur une table Calendar ,avec un where qui limite la liste des dates possibles
V1_MASTERDATA est une vue sur la table MasterData, avec un where qui limite les dimensions aux valeurs "courantes"
Je ne sais pas si cela peut avoir un impact sur la query.
Merci d'avance si quelqu'un a une explication et pourquoi pas une idée de remplacement
Isa