Vous n'êtes pas identifié(e).
Pages : 1
Je suis arrivé à faire ce que je voulais en enchaînant deux full join, comme je le pensais.
Encore merci pour votre aide.
D'accord, je vois le problème, c'est plutôt logique finalement, je me demande pourquoi Oracle accepte ça ...
Me voilà bien avancé, je vais donc devoir modifier la forme de la requête ...
Pensez vous qu'un FULL OUTER JOIN supplémentaire me permettrait d'arriver à un résultat similaire à celui souhaité au départ ?
Quelque chose du genre :
(...)
full outer join sad.CLIENT as "tab_cli1" on (r2.CLI2=tab_cli1.CLI_IDCLIENT)
full outer join sad.CLIENT as "tab_cli2" on (r2.CLI=tab_cli2.CLI_IDCLIENT)
(...)
Merci pour votre réponse rapide.
CLI_IDCLIENT est de format Numeric, et CLI ET CLI2 également vu que ce sont des alias de CLI_IDCLIENT.
J'avoue ne pas comprendre le problème, pourquoi PostgreSQL ne saurait il pas trier les colonnes ?
Bonjour,
Je suis en train de migrer une application BI d'Oracle vers PostgreSQL 8.3.
Je dois donc modifier chacune des requêtes SQL de façon à les adapter à Postgres. Il n'y pas de problème pour la majorité d'entre elles, mais certaines soulèvent une erreur : "FULL JOIN is only supported with merge-joinable join conditions"
J'ai beau chercher et essayer plusieurs choses, je ne trouve pas la solution.
Voici un exemple de requête posant problème :
------
select sum(CA), sum(Marge), Annee,sum(CA2), sum(MArge2),Annee2, CLI_NOMCLIENT from
(select sum(BUD_CARVALEUR) as CA ,sum(BUD_MAVALEUR) as Marge ,PER_NUMANNEE as Annee,CLI_IDCLIENT as Cli, AGE_LIBAGENCE as agence
from sad.CLIENT left outer join sad.IND_BUDGET on CLI_IDCLIENT=BUD_IDCLIENT
inner join sad.PERIODE on BUD_IDPERIODE=PER_IDPERIODE
inner join sad.SITE on BUD_IDSITE=SIT_IDSITE
inner join sad.AGENCE on SIT_IDAGE=AGE_IDAGE
where PER_IDPERIODE between 1 and 6
and AGE_NUMAGENCE like '44'
group by PER_NUMANNEE,CLI_IDCLIENT,AGE_LIBAGENCE) r1
full outer join
(select sum(BUD_CARVALEUR) as CA2 ,sum(BUD_MAVALEUR) as Marge2 ,PER_NUMANNEE as Annee2 ,CLI_IDCLIENT as Cli2
from sad.CLIENT left outer join sad.IND_BUDGET on CLI_IDCLIENT=BUD_IDCLIENT
inner join sad.PERIODE on BUD_IDPERIODE=PER_IDPERIODE
inner join sad.SITE on BUD_IDSITE=SIT_IDSITE
inner join sad.AGENCE on SIT_IDAGE=AGE_IDAGE
where PER_IDPERIODE between 7 and 13
and AGE_NUMAGENCE like '44'
group by PER_NUMANNEE,CLI_IDCLIENT) r2
on r1.CLI=r2.CLI2
full outer join sad.CLIENT on (r2.CLI2=CLI_IDCLIENT or r1.CLI=CLI_IDCLIENT )
where CA is not null or CA2 is not null
group by (CLI_NOMCLIENT)
order by CLI_NOMCLIENT
------
L'erreur disparait si j'enlève dans le dernier "full outer join" 'r2.CLI2=CLI_IDCLIENT' ou 'r1.CLI=CLI_IDCLIENT'
Pouvez vous me dire ce que signifie cette erreur, et comment y remédier ?
Merci d'avance.
Pages : 1