Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme de requete ... left & rigth outer join en meme tps ???

6 réponses
Avatar
Chnew
Bonjour,

Voici un petit probleme de requete

Je dois comparer 2 portefeuilles de titres.
et calculer pour chaque ligne la difference entre les 2.
Or le portefeuille ne possede pas toujours les meme titres=20
qu'un autre portefeuille.

Je m'explique :

schematiquement,

je fais un select sur ma table des titres_du_Portefeuille=20
dont le portefeuille_name est "A" ----> SELECT A

je fais un 2 eme select sur ma table des=20
titres_du_Portefeuille dont le portefeuille_name est "B" --
> SELECT B

j'ai donc tous les titres que comporte mes portefeuilles.=20
(c'est tres schematique ma requete fais 50 lignes avec=20
plein de calcul etc ...)

pour pouvoir comparer mes 2 portefeuilles , je transforme=20
donc mes requetes ci dessus en table virtuelle

Je fais donc

SELECT A, B, C, D ...

FROM

(SELECT A) AS TABLE_VIRTUEL1 , (SELECT B) AS TABLE_VIRTUEL2

WHERE

TABLE_VIRTUEL1.CODE_DE_MATABLE1 (+) =3D=20
TABLE_VIRTUEL2.CODE_DE_MATABLE2


mes cl=E9s st compatibles bien entendu....


Voici mon probleme :

qd le nb de titre de mon portefeuille A est > nb de titre=20
du portefeuille B aucun soucis mon "left outer join" est=20
bien tourn=E9 dans le bon sens..

Or qd c'est linverse , cela ne va plus car je n'ai plus=20
les titres de l'autres portefeuille.

je voudrais en fait avoir le maximum du nb de titres ...

en fait je sais pas comment faire mon left outer join ;=20
dans quel sens ???
et la je me perds je sais pas quoi faire


pouvez vous m'aider SVP ?

6 réponses

Avatar
Sylvain Lafontaine
Ce n'est ni un « Left Outer Join » ou un « Right Outer Join » mais un « Full
Outer Join » que vous devez prendre.

Pour la syntaxe, vous devez utilisez la nouvelle notation ANSI plutôt que
l'ancienne (+= et =+) car cette dernière ne supporte pas les FOJ sur la
plupart des serveurs SQL.

À titre indicatif, vous pouvez également simuler un FOJ en utilisant une
UNION avec deux requêtes (une Left et une Right).

S. L.

"Chnew" wrote in message
news:bc8501c479a0$b604c270$
Bonjour,

Voici un petit probleme de requete

Je dois comparer 2 portefeuilles de titres.
et calculer pour chaque ligne la difference entre les 2.
Or le portefeuille ne possede pas toujours les meme titres
qu'un autre portefeuille.

Je m'explique :

schematiquement,

je fais un select sur ma table des titres_du_Portefeuille
dont le portefeuille_name est "A" ----> SELECT A

je fais un 2 eme select sur ma table des
titres_du_Portefeuille dont le portefeuille_name est "B" --
SELECT B



j'ai donc tous les titres que comporte mes portefeuilles.
(c'est tres schematique ma requete fais 50 lignes avec
plein de calcul etc ...)

pour pouvoir comparer mes 2 portefeuilles , je transforme
donc mes requetes ci dessus en table virtuelle

Je fais donc

SELECT A, B, C, D ...

FROM

(SELECT A) AS TABLE_VIRTUEL1 , (SELECT B) AS TABLE_VIRTUEL2

WHERE

TABLE_VIRTUEL1.CODE_DE_MATABLE1 (+) TABLE_VIRTUEL2.CODE_DE_MATABLE2


mes clés st compatibles bien entendu....


Voici mon probleme :

qd le nb de titre de mon portefeuille A est > nb de titre
du portefeuille B aucun soucis mon "left outer join" est
bien tourné dans le bon sens..

Or qd c'est linverse , cela ne va plus car je n'ai plus
les titres de l'autres portefeuille.

je voudrais en fait avoir le maximum du nb de titres ...

en fait je sais pas comment faire mon left outer join ;
dans quel sens ???
et la je me perds je sais pas quoi faire


pouvez vous m'aider SVP ?
Avatar
Chnew
Merci de votre réponse....


cependant un union jy avais pensé mais cela doublerait la
longueur de ma requete qui est déja extremement longue .


S.R


-----Message d'origine-----
Ce n'est ni un « Left Outer Join » ou un « Right Outer


Join » mais un « Full
Outer Join » que vous devez prendre.

Pour la syntaxe, vous devez utilisez la nouvelle


notation ANSI plutôt que
l'ancienne (+= et =+) car cette dernière ne supporte pas


les FOJ sur la
plupart des serveurs SQL.

À titre indicatif, vous pouvez également simuler un FOJ


en utilisant une
UNION avec deux requêtes (une Left et une Right).

S. L.

"Chnew" wrote in


message
news:bc8501c479a0$b604c270$
Bonjour,

Voici un petit probleme de requete

Je dois comparer 2 portefeuilles de titres.
et calculer pour chaque ligne la difference entre les 2.
Or le portefeuille ne possede pas toujours les meme titres
qu'un autre portefeuille.

Je m'explique :

schematiquement,

je fais un select sur ma table des titres_du_Portefeuille
dont le portefeuille_name est "A" ----> SELECT A

je fais un 2 eme select sur ma table des
titres_du_Portefeuille dont le portefeuille_name est "B" -


-
SELECT B



j'ai donc tous les titres que comporte mes portefeuilles.
(c'est tres schematique ma requete fais 50 lignes avec
plein de calcul etc ...)

pour pouvoir comparer mes 2 portefeuilles , je transforme
donc mes requetes ci dessus en table virtuelle

Je fais donc

SELECT A, B, C, D ...

FROM

(SELECT A) AS TABLE_VIRTUEL1 , (SELECT B) AS


TABLE_VIRTUEL2

WHERE

TABLE_VIRTUEL1.CODE_DE_MATABLE1 (+) =
TABLE_VIRTUEL2.CODE_DE_MATABLE2


mes clés st compatibles bien entendu....


Voici mon probleme :

qd le nb de titre de mon portefeuille A est > nb de titre
du portefeuille B aucun soucis mon "left outer join" est
bien tourné dans le bon sens..

Or qd c'est linverse , cela ne va plus car je n'ai plus
les titres de l'autres portefeuille.

je voudrais en fait avoir le maximum du nb de titres ...

en fait je sais pas comment faire mon left outer join ;
dans quel sens ???
et la je me perds je sais pas quoi faire


pouvez vous m'aider SVP ?


.



Avatar
Leus
erf,
Je ne connaissais meme pas l'existence
du "Full outer join"
-----Message d'origine-----
Ce n'est ni un « Left Outer Join » ou un « Right Outer


Join » mais un « Full
Outer Join » que vous devez prendre.

Pour la syntaxe, vous devez utilisez la nouvelle


notation ANSI plutôt que
l'ancienne (+= et =+) car cette dernière ne supporte


pas les FOJ sur la
plupart des serveurs SQL.

À titre indicatif, vous pouvez également simuler un FOJ


en utilisant une
UNION avec deux requêtes (une Left et une Right).

S. L.

"Chnew" wrote in


message
news:bc8501c479a0$b604c270$
Bonjour,

Voici un petit probleme de requete

Je dois comparer 2 portefeuilles de titres.
et calculer pour chaque ligne la difference entre les 2.
Or le portefeuille ne possede pas toujours les meme


titres
qu'un autre portefeuille.

Je m'explique :

schematiquement,

je fais un select sur ma table des titres_du_Portefeuille
dont le portefeuille_name est "A" ----> SELECT A

je fais un 2 eme select sur ma table des
titres_du_Portefeuille dont le portefeuille_name


est "B" --
SELECT B



j'ai donc tous les titres que comporte mes portefeuilles.
(c'est tres schematique ma requete fais 50 lignes avec
plein de calcul etc ...)

pour pouvoir comparer mes 2 portefeuilles , je transforme
donc mes requetes ci dessus en table virtuelle

Je fais donc

SELECT A, B, C, D ...

FROM

(SELECT A) AS TABLE_VIRTUEL1 , (SELECT B) AS


TABLE_VIRTUEL2

WHERE

TABLE_VIRTUEL1.CODE_DE_MATABLE1 (+) =
TABLE_VIRTUEL2.CODE_DE_MATABLE2


mes clés st compatibles bien entendu....


Voici mon probleme :

qd le nb de titre de mon portefeuille A est > nb de titre
du portefeuille B aucun soucis mon "left outer join" est
bien tourné dans le bon sens..

Or qd c'est linverse , cela ne va plus car je n'ai plus
les titres de l'autres portefeuille.

je voudrais en fait avoir le maximum du nb de titres ...

en fait je sais pas comment faire mon left outer join ;
dans quel sens ???
et la je me perds je sais pas quoi faire


pouvez vous m'aider SVP ?


.



Avatar
Chnew
Je n'arrive pas a effectuer ma requete FOJ !
Je ne vois pas comment faire ...
pour l'instant c'est sous oracle mais voici la requete ....

SELECT

-- PARTIE SUR LES INFOS GENRALES BONDS
PORTFOLIO_CODE_PTFOLIO ,
BENCHMARK_CODE_BCHMK ,
DECODE
(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.BONDS_IDBCHMK,PTFOLIO.B
ONDS_IDPTFOLIO) bonds_id ,
DECODE(PTFOLIO.BONDS_IDPTFOLIO,NULL,'N','Y') P ,
DECODE(BCHMK.BONDS_IDBCHMK,NULL,'N','Y') B ,
DECODE(PTFHOLDVERS_COMMENT_PTFOLIO,NULL,0,1) Com ,
DECODE
(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.ISIN,PTFOLIO.ISIN_PTFOL
IO) ISIN,
DECODE
(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.ISSUER_BCHMK,PTFOLIO.IS
SUER_PTFOLIO) ISSUER,
DECODE
(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.CPN_BCHMK,PTFOLIO.CPN_P
TFOLIO) COUPON,
DECODE
(BONDS_IDPTFOLIO,NULL,BCHMK.Maturity_BCHMK,PTFOLIO.Maturity
_PTFOLIO) Maturity,
DECODE
(BONDS_IDPTFOLIO,NULL,BCHMK.Currency_BCHMK,PTFOLIO.Currency
_PTFOLIO) Currency,
DECODE
(PTFOLIO.Price_PTFOLIO,NULL,BCHMK.PRICE_BCHMK,PTFOLIO.Price
_PTFOLIO) Price,

-- PARTIE SUR LES PORTFOLIO
PTFOLIO.QTE_PTFOLIO PTF_HOLDING,
PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO) PTF_TOTAL_VALUE,
(PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO)) / (BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK)) PTF_WEIGHT,
PTFOLIO.MDuration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))) PTF_CTMD,
PTFOLIO.Duration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))) PTF_CTD,

-- PARTIE SUR LES BENCHMARKS
BCHMK.QTE_BCHMK BENCH_HOLDING ,
BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK) BENCH_TOTAL_VALUE,
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO))
BENCH_WEIGHT,
BCHMK.MODDURATION_BCHMK *((BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK))/
(PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO))) BENCH_CTMD ,
BCHMK.DURATION_BCHMK *((BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK))/
(PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO))) BENCH_CTD ,

-- PARTIE SUR LES DELTAS
((PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO)) / (BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK))) -
((BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)))
DELTA_WEIGHT,
(PTFOLIO.MDuration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK)))) - (BCHMK.MODDURATION_BCHMK *
((BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO))))
DELTA_CTMD,
(PTFOLIO.Duration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK)))) - (BCHMK.DURATION_BCHMK *
((BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO))))
DELTA_CTD ,

DECODE
(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.ACCRUED_BCHMK,PTFOLIO.A
CCRUED_PTFOLIO) ACCRUED ,
DECODE
(BONDS_IDPTFOLIO,NULL,BCHMK.NextCPN_BCHMK,PTFOLIO.NextCPN_P
TFOLIO) NextCPN,
DECODE
(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.YIELD_BCHMK,PTFOLIO.YIE
LD_PTFOLIO) YIELD ,
(TO_DATE((DECODE
(BONDS_IDPTFOLIO,NULL,BCHMK.Maturity_BCHMK,PTFOLIO.Maturity
_PTFOLIO)-3),'DD-MM-YY') - TO_DATE('01/01/2004','DD-MM-
YY'))/365

From
(
SELECT
PORTFOLIO.PORTFOLIO_CODE PORTFOLIO_CODE_PTFOLIO,
PORTFOLIO.PORTFOLIO_LONGNAME,
PTFHOLDINGVERSION.PTFHOLDVERS_ID,
PTFHOLDINGVERSION.PTFHOLDVERS_DATE ,
PTFHOLDINGVERSION.PTFHOLDVERS_COMMENT
PTFHOLDVERS_COMMENT_PTFOLIO ,
PTFHOLDING.PTFHOLDING_ID,
PTFHOLDING.PTFHOLDING_QUANTITY QTE_PTFOLIO,
INSTRUMENT.INSTRUMENT_ID,
INSTRUMENT.INSTRUMENT_LONGNAME,
BONDS.BONDS_ID BONDS_IDPTFOLIO,
BONDS.CURRENCY_CODE Currency_PTFOLIO,
BONDS.ISSUER_CODE Issuer_PTFOLIO,
BONDS.BONDS_CPNRATE Cpn_PTFOLIO,
BONDS.BONDS_MATURITY Maturity_PTFOLIO,
BONDS.BONDS_NEXTCPN NextCpn_PTFOLIO ,
INSTRUMENTPRICE.INSTRUMENTPRICE_ID,
INSTRUMENTPRICE.INSTRUMENTPRICE_MIDPRICE Price_PTFOLIO,
BONDS.BONDS_ISINCODE ISIN_PTFOLIO ,
INSTRUMENTPRICE.INSTRUMENTPRICE_ACCRUED Accrued_PTFOLIO,
INSTRUMENTPRICE.INSTRUMENTPRICE_YIELD Yield_PTFOLIO,
INSTRUMENTPRICE.INSTRUMENTPRICE_DURATION Duration_PTFOLIO ,
INSTRUMENTPRICE.INSTRUMENTPRICE_MODDURATION
MDuration_PTFOLIO
From
((((PORTFOLIO INNER JOIN PTFHOLDINGVERSION ON
PORTFOLIO.PORTFOLIO_CODE =
PTFHOLDINGVERSION.PORTFOLIO_CODE)
INNER JOIN PTFHOLDING ON PTFHOLDINGVERSION.PTFHOLDVERS_ID
= PTFHOLDING.PTFHOLDVERS_ID)
LEFT OUTER JOIN INSTRUMENT ON PTFHOLDING.INSTRUMENT_ID =
INSTRUMENT.INSTRUMENT_ID)
INNER JOIN BONDS ON INSTRUMENT.INSTRUMENT_ID =
BONDS.INSTRUMENT_ID)
LEFT OUTER JOIN INSTRUMENTPRICE ON
INSTRUMENT.INSTRUMENT_ID = INSTRUMENTPRICE.INSTRUMENT_ID
WHERE PTFHOLDINGVERSION.PTFHOLDVERS_DATE=(SELECT MAX
(PTFHOLDVERS_DATE) FROM PTFHOLDINGVERSION WHERE
PORTFOLIO_CODE = PORTFOLIO.PORTFOLIO_CODE AND
PTFHOLDVERS_RECSTATUS = 'VERIFY')
)
PTFOLIO ,
(
SELECT
BENCHMARK.BENCHMARK_CODE BENCHMARK_CODE_BCHMK,
BENCHMARK.BENCHMARK_LONGNAME,
BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_ID,
BENCHHOLDING_VERSION.BENCHMARK_CODE,
BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_DATE ,
BENCHHOLDING.BENCHHOLDING_ID ,
BENCHHOLDING.BENCHHOLDING_QUANTITY QTE_BCHMK ,
INSTRUMENT.INSTRUMENT_ID,
BONDS.BONDS_ID BONDS_IDBCHMK,
BONDS.BONDS_ISINCODE ISIN ,
BONDS.ISSUER_CODE ISSUER_BCHMK,
BONDS.BONDS_CPNRATE Cpn_BCHMK,
BONDS.CURRENCY_CODE Currency_BCHMK,
BONDS.BONDS_MATURITY Maturity_BCHMK,
BONDS.BONDS_NEXTCPN NextCpn_BCHMK ,
INSTRUMENTPRICE.INSTRUMENTPRICE_MIDPRICE PRICE_BCHMK,

INSTRUMENTPRICE.INSTRUMENTPRICE_ACCRUED ACCRUED_BCHMK,
INSTRUMENTPRICE.INSTRUMENTPRICE_YIELD YIELD_BCHMK,
INSTRUMENTPRICE.INSTRUMENTPRICE_DURATION DURATION_BCHMK ,
INSTRUMENTPRICE.INSTRUMENTPRICE_MODDURATION
MODDURATION_BCHMK
From
((((BENCHMARK INNER JOIN BENCHHOLDING_VERSION ON
BENCHMARK.BENCHMARK_CODE =
BENCHHOLDING_VERSION.BENCHMARK_CODE)
INNER JOIN BENCHHOLDING ON
BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_ID =
BENCHHOLDING.BENCHHOLDING_VERSION_ID)
LEFT OUTER JOIN INSTRUMENT ON BENCHHOLDING.INSTRUMENT_ID =
INSTRUMENT.INSTRUMENT_ID)
INNER JOIN BONDS ON INSTRUMENT.INSTRUMENT_ID =
BONDS.INSTRUMENT_ID)
LEFT OUTER JOIN INSTRUMENTPRICE ON
INSTRUMENT.INSTRUMENT_ID = INSTRUMENTPRICE.INSTRUMENT_ID
WHERE BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_DATE =
(SELECT MAX(BENCHHOLDING_VERSION_DATE) FROM
BENCHHOLDING_VERSION WHERE BENCHMARK_CODE =
BENCHMARK.BENCHMARK_CODE AND BENCHHOLDING_VERSION_STATUS
= 'VERIFY')
)
BCHMK

WHERE BCHMK.BONDS_IDBCHMK (+)= PTFOLIO.BONDS_IDPTFOLIO




-----Message d'origine-----
Merci de votre réponse....


cependant un union jy avais pensé mais cela doublerait la
longueur de ma requete qui est déja extremement longue .


S.R


-----Message d'origine-----
Ce n'est ni un « Left Outer Join » ou un « Right Outer


Join » mais un « Full
Outer Join » que vous devez prendre.

Pour la syntaxe, vous devez utilisez la nouvelle


notation ANSI plutôt que
l'ancienne (+= et =+) car cette dernière ne supporte




pas
les FOJ sur la
plupart des serveurs SQL.

À titre indicatif, vous pouvez également simuler un FOJ


en utilisant une
UNION avec deux requêtes (une Left et une Right).

S. L.

"Chnew" wrote in


message
news:bc8501c479a0$b604c270$
Bonjour,

Voici un petit probleme de requete

Je dois comparer 2 portefeuilles de titres.
et calculer pour chaque ligne la difference entre les 2.
Or le portefeuille ne possede pas toujours les meme




titres
qu'un autre portefeuille.

Je m'explique :

schematiquement,

je fais un select sur ma table des titres_du_Portefeuille
dont le portefeuille_name est "A" ----> SELECT A

je fais un 2 eme select sur ma table des
titres_du_Portefeuille dont le portefeuille_name




est "B" -
-
SELECT B



j'ai donc tous les titres que comporte mes portefeuilles.
(c'est tres schematique ma requete fais 50 lignes avec
plein de calcul etc ...)

pour pouvoir comparer mes 2 portefeuilles , je transforme
donc mes requetes ci dessus en table virtuelle

Je fais donc

SELECT A, B, C, D ...

FROM

(SELECT A) AS TABLE_VIRTUEL1 , (SELECT B) AS


TABLE_VIRTUEL2

WHERE

TABLE_VIRTUEL1.CODE_DE_MATABLE1 (+) =
TABLE_VIRTUEL2.CODE_DE_MATABLE2


mes clés st compatibles bien entendu....


Voici mon probleme :

qd le nb de titre de mon portefeuille A est > nb de titre
du portefeuille B aucun soucis mon "left outer join" est
bien tourné dans le bon sens..

Or qd c'est linverse , cela ne va plus car je n'ai plus
les titres de l'autres portefeuille.

je voudrais en fait avoir le maximum du nb de titres ...

en fait je sais pas comment faire mon left outer join ;
dans quel sens ???
et la je me perds je sais pas quoi faire


pouvez vous m'aider SVP ?


.



.



Avatar
Chnew
c'est bon ja i reussi merci

par contre quel est la syntaxe ansi pour le full outer
join ?

(+) = (+) ne fonctionne pas ....


SELECT

-- PARTIE SUR LES INFOS GENRALES BONDS
PORTFOLIO_CODE_PTFOLIO ,
BENCHMARK_CODE_BCHMK ,
DECODE
(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.BONDS_IDBCHMK,PTFOLIO.B
ONDS_IDPTFOLIO) bonds_id ,
DECODE(PTFOLIO.BONDS_IDPTFOLIO,NULL,'N','Y') P ,
DECODE(BCHMK.BONDS_IDBCHMK,NULL,'N','Y') B ,
DECODE(PTFHOLDVERS_COMMENT_PTFOLIO,NULL,0,1) Com ,
DECODE
(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.ISIN,PTFOLIO.ISIN_PTFOL
IO) ISIN,
DECODE
(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.ISSUER_BCHMK,PTFOLIO.IS
SUER_PTFOLIO) ISSUER,
DECODE
(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.CPN_BCHMK,PTFOLIO.CPN_P
TFOLIO) COUPON,
DECODE
(BONDS_IDPTFOLIO,NULL,BCHMK.Maturity_BCHMK,PTFOLIO.Maturity
_PTFOLIO) Maturity,
DECODE
(BONDS_IDPTFOLIO,NULL,BCHMK.Currency_BCHMK,PTFOLIO.Currency
_PTFOLIO) Currency,
DECODE
(PTFOLIO.Price_PTFOLIO,NULL,BCHMK.PRICE_BCHMK,PTFOLIO.Price
_PTFOLIO) Price,

-- PARTIE SUR LES PORTFOLIO
PTFOLIO.QTE_PTFOLIO PTF_HOLDING,
PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO) PTF_TOTAL_VALUE,
(PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO)) / (BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK)) PTF_WEIGHT,
PTFOLIO.MDuration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))) PTF_CTMD,
PTFOLIO.Duration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))) PTF_CTD,

-- PARTIE SUR LES BENCHMARKS
BCHMK.QTE_BCHMK BENCH_HOLDING ,
BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK) BENCH_TOTAL_VALUE,
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO))
BENCH_WEIGHT,
BCHMK.MODDURATION_BCHMK *((BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK))/
(PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO))) BENCH_CTMD ,
BCHMK.DURATION_BCHMK *((BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK))/
(PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO))) BENCH_CTD ,

-- PARTIE SUR LES DELTAS
((PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO)) / (BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK))) -
((BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)))
DELTA_WEIGHT,
(PTFOLIO.MDuration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK)))) - (BCHMK.MODDURATION_BCHMK *
((BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO))))
DELTA_CTMD,
(PTFOLIO.Duration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK)))) - (BCHMK.DURATION_BCHMK *
((BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO))))
DELTA_CTD ,

DECODE
(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.ACCRUED_BCHMK,PTFOLIO.A
CCRUED_PTFOLIO) ACCRUED ,
DECODE
(BONDS_IDPTFOLIO,NULL,BCHMK.NextCPN_BCHMK,PTFOLIO.NextCPN_P
TFOLIO) NextCPN,
DECODE
(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.YIELD_BCHMK,PTFOLIO.YIE
LD_PTFOLIO) YIELD ,
(TO_DATE((DECODE
(BONDS_IDPTFOLIO,NULL,BCHMK.Maturity_BCHMK,PTFOLIO.Maturity
_PTFOLIO)-3),'DD-MM-YY') - TO_DATE('01/01/2004','DD-MM-
YY'))/365

From

(
SELECT
PORTFOLIO.PORTFOLIO_CODE PORTFOLIO_CODE_PTFOLIO,
PORTFOLIO.PORTFOLIO_LONGNAME,
PTFHOLDINGVERSION.PTFHOLDVERS_ID,
PTFHOLDINGVERSION.PTFHOLDVERS_DATE ,
PTFHOLDINGVERSION.PTFHOLDVERS_COMMENT
PTFHOLDVERS_COMMENT_PTFOLIO ,
PTFHOLDING.PTFHOLDING_ID,
PTFHOLDING.PTFHOLDING_QUANTITY QTE_PTFOLIO,
INSTRUMENT.INSTRUMENT_ID,
INSTRUMENT.INSTRUMENT_LONGNAME,
BONDS.BONDS_ID BONDS_IDPTFOLIO,
BONDS.CURRENCY_CODE Currency_PTFOLIO,
BONDS.ISSUER_CODE Issuer_PTFOLIO,
BONDS.BONDS_CPNRATE Cpn_PTFOLIO,
BONDS.BONDS_MATURITY Maturity_PTFOLIO,
BONDS.BONDS_NEXTCPN NextCpn_PTFOLIO ,
INSTRUMENTPRICE.INSTRUMENTPRICE_ID,
INSTRUMENTPRICE.INSTRUMENTPRICE_MIDPRICE Price_PTFOLIO,
BONDS.BONDS_ISINCODE ISIN_PTFOLIO ,
INSTRUMENTPRICE.INSTRUMENTPRICE_ACCRUED Accrued_PTFOLIO,
INSTRUMENTPRICE.INSTRUMENTPRICE_YIELD Yield_PTFOLIO,
INSTRUMENTPRICE.INSTRUMENTPRICE_DURATION Duration_PTFOLIO ,
INSTRUMENTPRICE.INSTRUMENTPRICE_MODDURATION
MDuration_PTFOLIO
From
((((PORTFOLIO INNER JOIN PTFHOLDINGVERSION ON
PORTFOLIO.PORTFOLIO_CODE =
PTFHOLDINGVERSION.PORTFOLIO_CODE)
INNER JOIN PTFHOLDING ON PTFHOLDINGVERSION.PTFHOLDVERS_ID
= PTFHOLDING.PTFHOLDVERS_ID)
LEFT OUTER JOIN INSTRUMENT ON PTFHOLDING.INSTRUMENT_ID =
INSTRUMENT.INSTRUMENT_ID)
INNER JOIN BONDS ON INSTRUMENT.INSTRUMENT_ID =
BONDS.INSTRUMENT_ID)
LEFT OUTER JOIN INSTRUMENTPRICE ON
INSTRUMENT.INSTRUMENT_ID = INSTRUMENTPRICE.INSTRUMENT_ID
WHERE PTFHOLDINGVERSION.PTFHOLDVERS_DATE=(SELECT MAX
(PTFHOLDVERS_DATE) FROM PTFHOLDINGVERSION WHERE
PORTFOLIO_CODE = PORTFOLIO.PORTFOLIO_CODE AND
PTFHOLDVERS_RECSTATUS = 'VERIFY')
) PTFOLIO FULL OUTER JOIN (
SELECT
BENCHMARK.BENCHMARK_CODE BENCHMARK_CODE_BCHMK,
BENCHMARK.BENCHMARK_LONGNAME,
BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_ID,
BENCHHOLDING_VERSION.BENCHMARK_CODE,
BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_DATE ,
BENCHHOLDING.BENCHHOLDING_ID ,
BENCHHOLDING.BENCHHOLDING_QUANTITY QTE_BCHMK ,
INSTRUMENT.INSTRUMENT_ID,
BONDS.BONDS_ID BONDS_IDBCHMK,
BONDS.BONDS_ISINCODE ISIN ,
BONDS.ISSUER_CODE ISSUER_BCHMK,
BONDS.BONDS_CPNRATE Cpn_BCHMK,
BONDS.CURRENCY_CODE Currency_BCHMK,
BONDS.BONDS_MATURITY Maturity_BCHMK,
BONDS.BONDS_NEXTCPN NextCpn_BCHMK ,
INSTRUMENTPRICE.INSTRUMENTPRICE_MIDPRICE PRICE_BCHMK,

INSTRUMENTPRICE.INSTRUMENTPRICE_ACCRUED ACCRUED_BCHMK,
INSTRUMENTPRICE.INSTRUMENTPRICE_YIELD YIELD_BCHMK,
INSTRUMENTPRICE.INSTRUMENTPRICE_DURATION DURATION_BCHMK ,
INSTRUMENTPRICE.INSTRUMENTPRICE_MODDURATION
MODDURATION_BCHMK
From
((((BENCHMARK INNER JOIN BENCHHOLDING_VERSION ON
BENCHMARK.BENCHMARK_CODE =
BENCHHOLDING_VERSION.BENCHMARK_CODE)
INNER JOIN BENCHHOLDING ON
BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_ID =
BENCHHOLDING.BENCHHOLDING_VERSION_ID)
LEFT OUTER JOIN INSTRUMENT ON BENCHHOLDING.INSTRUMENT_ID =
INSTRUMENT.INSTRUMENT_ID)
INNER JOIN BONDS ON INSTRUMENT.INSTRUMENT_ID =
BONDS.INSTRUMENT_ID)
LEFT OUTER JOIN INSTRUMENTPRICE ON
INSTRUMENT.INSTRUMENT_ID = INSTRUMENTPRICE.INSTRUMENT_ID
WHERE BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_DATE =
(SELECT MAX(BENCHHOLDING_VERSION_DATE) FROM
BENCHHOLDING_VERSION WHERE BENCHMARK_CODE =
BENCHMARK.BENCHMARK_CODE AND BENCHHOLDING_VERSION_STATUS
= 'VERIFY')
) BCHMK on BCHMK.BONDS_IDBCHMK = PTFOLIO.BONDS_IDPTFOLIO





-----Message d'origine-----

Je n'arrive pas a effectuer ma requete FOJ !
Je ne vois pas comment faire ...
pour l'instant c'est sous oracle mais voici la


requete ....

SELECT

-- PARTIE SUR LES INFOS GENRALES BONDS
PORTFOLIO_CODE_PTFOLIO ,
BENCHMARK_CODE_BCHMK ,
DECODE



(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.BONDS_IDBCHMK,PTFOLIO.B
ONDS_IDPTFOLIO) bonds_id ,
DECODE(PTFOLIO.BONDS_IDPTFOLIO,NULL,'N','Y') P ,
DECODE(BCHMK.BONDS_IDBCHMK,NULL,'N','Y') B ,
DECODE(PTFHOLDVERS_COMMENT_PTFOLIO,NULL,0,1) Com ,
DECODE



(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.ISIN,PTFOLIO.ISIN_PTFOL
IO) ISIN,
DECODE



(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.ISSUER_BCHMK,PTFOLIO.IS
SUER_PTFOLIO) ISSUER,
DECODE



(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.CPN_BCHMK,PTFOLIO.CPN_P
TFOLIO) COUPON,
DECODE



(BONDS_IDPTFOLIO,NULL,BCHMK.Maturity_BCHMK,PTFOLIO.Maturity
_PTFOLIO) Maturity,
DECODE



(BONDS_IDPTFOLIO,NULL,BCHMK.Currency_BCHMK,PTFOLIO.Currency
_PTFOLIO) Currency,
DECODE



(PTFOLIO.Price_PTFOLIO,NULL,BCHMK.PRICE_BCHMK,PTFOLIO.Price
_PTFOLIO) Price,

-- PARTIE SUR LES PORTFOLIO
PTFOLIO.QTE_PTFOLIO PTF_HOLDING,
PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO) PTF_TOTAL_VALUE,
(PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO)) / (BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK)) PTF_WEIGHT,
PTFOLIO.MDuration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))) PTF_CTMD,
PTFOLIO.Duration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))) PTF_CTD,

-- PARTIE SUR LES BENCHMARKS
BCHMK.QTE_BCHMK BENCH_HOLDING ,
BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK) BENCH_TOTAL_VALUE,
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO))
BENCH_WEIGHT,
BCHMK.MODDURATION_BCHMK *((BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK))/
(PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO))) BENCH_CTMD ,
BCHMK.DURATION_BCHMK *((BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK))/
(PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO))) BENCH_CTD ,

-- PARTIE SUR LES DELTAS
((PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO)) / (BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK))) -
((BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)))
DELTA_WEIGHT,
(PTFOLIO.MDuration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK)))) - (BCHMK.MODDURATION_BCHMK *
((BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO))))
DELTA_CTMD,
(PTFOLIO.Duration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK)))) - (BCHMK.DURATION_BCHMK *
((BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO))))
DELTA_CTD ,

DECODE



(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.ACCRUED_BCHMK,PTFOLIO.A
CCRUED_PTFOLIO) ACCRUED ,
DECODE



(BONDS_IDPTFOLIO,NULL,BCHMK.NextCPN_BCHMK,PTFOLIO.NextCPN_P
TFOLIO) NextCPN,
DECODE



(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.YIELD_BCHMK,PTFOLIO.YIE
LD_PTFOLIO) YIELD ,
(TO_DATE((DECODE



(BONDS_IDPTFOLIO,NULL,BCHMK.Maturity_BCHMK,PTFOLIO.Maturity
_PTFOLIO)-3),'DD-MM-YY') - TO_DATE('01/01/2004','DD-MM-
YY'))/365

From
(
SELECT
PORTFOLIO.PORTFOLIO_CODE PORTFOLIO_CODE_PTFOLIO,
PORTFOLIO.PORTFOLIO_LONGNAME,
PTFHOLDINGVERSION.PTFHOLDVERS_ID,
PTFHOLDINGVERSION.PTFHOLDVERS_DATE ,
PTFHOLDINGVERSION.PTFHOLDVERS_COMMENT
PTFHOLDVERS_COMMENT_PTFOLIO ,
PTFHOLDING.PTFHOLDING_ID,
PTFHOLDING.PTFHOLDING_QUANTITY QTE_PTFOLIO,
INSTRUMENT.INSTRUMENT_ID,
INSTRUMENT.INSTRUMENT_LONGNAME,
BONDS.BONDS_ID BONDS_IDPTFOLIO,
BONDS.CURRENCY_CODE Currency_PTFOLIO,
BONDS.ISSUER_CODE Issuer_PTFOLIO,
BONDS.BONDS_CPNRATE Cpn_PTFOLIO,
BONDS.BONDS_MATURITY Maturity_PTFOLIO,
BONDS.BONDS_NEXTCPN NextCpn_PTFOLIO ,
INSTRUMENTPRICE.INSTRUMENTPRICE_ID,
INSTRUMENTPRICE.INSTRUMENTPRICE_MIDPRICE Price_PTFOLIO,
BONDS.BONDS_ISINCODE ISIN_PTFOLIO ,
INSTRUMENTPRICE.INSTRUMENTPRICE_ACCRUED Accrued_PTFOLIO,
INSTRUMENTPRICE.INSTRUMENTPRICE_YIELD Yield_PTFOLIO,
INSTRUMENTPRICE.INSTRUMENTPRICE_DURATION


Duration_PTFOLIO ,
INSTRUMENTPRICE.INSTRUMENTPRICE_MODDURATION
MDuration_PTFOLIO
From
((((PORTFOLIO INNER JOIN PTFHOLDINGVERSION ON
PORTFOLIO.PORTFOLIO_CODE =
PTFHOLDINGVERSION.PORTFOLIO_CODE)
INNER JOIN PTFHOLDING ON PTFHOLDINGVERSION.PTFHOLDVERS_ID
= PTFHOLDING.PTFHOLDVERS_ID)
LEFT OUTER JOIN INSTRUMENT ON PTFHOLDING.INSTRUMENT_ID =
INSTRUMENT.INSTRUMENT_ID)
INNER JOIN BONDS ON INSTRUMENT.INSTRUMENT_ID =
BONDS.INSTRUMENT_ID)
LEFT OUTER JOIN INSTRUMENTPRICE ON
INSTRUMENT.INSTRUMENT_ID = INSTRUMENTPRICE.INSTRUMENT_ID
WHERE PTFHOLDINGVERSION.PTFHOLDVERS_DATE=(SELECT MAX
(PTFHOLDVERS_DATE) FROM PTFHOLDINGVERSION WHERE
PORTFOLIO_CODE = PORTFOLIO.PORTFOLIO_CODE AND
PTFHOLDVERS_RECSTATUS = 'VERIFY')
)
PTFOLIO ,
(
SELECT
BENCHMARK.BENCHMARK_CODE BENCHMARK_CODE_BCHMK,
BENCHMARK.BENCHMARK_LONGNAME,
BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_ID,
BENCHHOLDING_VERSION.BENCHMARK_CODE,
BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_DATE ,
BENCHHOLDING.BENCHHOLDING_ID ,
BENCHHOLDING.BENCHHOLDING_QUANTITY QTE_BCHMK ,
INSTRUMENT.INSTRUMENT_ID,
BONDS.BONDS_ID BONDS_IDBCHMK,
BONDS.BONDS_ISINCODE ISIN ,
BONDS.ISSUER_CODE ISSUER_BCHMK,
BONDS.BONDS_CPNRATE Cpn_BCHMK,
BONDS.CURRENCY_CODE Currency_BCHMK,
BONDS.BONDS_MATURITY Maturity_BCHMK,
BONDS.BONDS_NEXTCPN NextCpn_BCHMK ,
INSTRUMENTPRICE.INSTRUMENTPRICE_MIDPRICE PRICE_BCHMK,

INSTRUMENTPRICE.INSTRUMENTPRICE_ACCRUED ACCRUED_BCHMK,
INSTRUMENTPRICE.INSTRUMENTPRICE_YIELD YIELD_BCHMK,
INSTRUMENTPRICE.INSTRUMENTPRICE_DURATION DURATION_BCHMK ,
INSTRUMENTPRICE.INSTRUMENTPRICE_MODDURATION
MODDURATION_BCHMK
From
((((BENCHMARK INNER JOIN BENCHHOLDING_VERSION ON
BENCHMARK.BENCHMARK_CODE =
BENCHHOLDING_VERSION.BENCHMARK_CODE)
INNER JOIN BENCHHOLDING ON
BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_ID =
BENCHHOLDING.BENCHHOLDING_VERSION_ID)
LEFT OUTER JOIN INSTRUMENT ON BENCHHOLDING.INSTRUMENT_ID


=
INSTRUMENT.INSTRUMENT_ID)
INNER JOIN BONDS ON INSTRUMENT.INSTRUMENT_ID =
BONDS.INSTRUMENT_ID)
LEFT OUTER JOIN INSTRUMENTPRICE ON
INSTRUMENT.INSTRUMENT_ID = INSTRUMENTPRICE.INSTRUMENT_ID
WHERE BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_DATE =
(SELECT MAX(BENCHHOLDING_VERSION_DATE) FROM
BENCHHOLDING_VERSION WHERE BENCHMARK_CODE =
BENCHMARK.BENCHMARK_CODE AND BENCHHOLDING_VERSION_STATUS
= 'VERIFY')
)
BCHMK

WHERE BCHMK.BONDS_IDBCHMK (+)= PTFOLIO.BONDS_IDPTFOLIO




-----Message d'origine-----
Merci de votre réponse....


cependant un union jy avais pensé mais cela doublerait




la
longueur de ma requete qui est déja extremement longue .


S.R


-----Message d'origine-----
Ce n'est ni un « Left Outer Join » ou un « Right Outer


Join » mais un « Full
Outer Join » que vous devez prendre.

Pour la syntaxe, vous devez utilisez la nouvelle


notation ANSI plutôt que
l'ancienne (+= et =+) car cette dernière ne supporte




pas
les FOJ sur la
plupart des serveurs SQL.

À titre indicatif, vous pouvez également simuler un FOJ


en utilisant une
UNION avec deux requêtes (une Left et une Right).

S. L.

"Chnew" wrote in


message
news:bc8501c479a0$b604c270$
Bonjour,

Voici un petit probleme de requete

Je dois comparer 2 portefeuilles de titres.
et calculer pour chaque ligne la difference entre les 2.
Or le portefeuille ne possede pas toujours les meme




titres
qu'un autre portefeuille.

Je m'explique :

schematiquement,

je fais un select sur ma table des






titres_du_Portefeuille
dont le portefeuille_name est "A" ----> SELECT A

je fais un 2 eme select sur ma table des
titres_du_Portefeuille dont le portefeuille_name




est "B" -
-
SELECT B



j'ai donc tous les titres que comporte mes






portefeuilles.
(c'est tres schematique ma requete fais 50 lignes avec
plein de calcul etc ...)

pour pouvoir comparer mes 2 portefeuilles , je






transforme
donc mes requetes ci dessus en table virtuelle

Je fais donc

SELECT A, B, C, D ...

FROM

(SELECT A) AS TABLE_VIRTUEL1 , (SELECT B) AS


TABLE_VIRTUEL2

WHERE

TABLE_VIRTUEL1.CODE_DE_MATABLE1 (+) =
TABLE_VIRTUEL2.CODE_DE_MATABLE2


mes clés st compatibles bien entendu....


Voici mon probleme :

qd le nb de titre de mon portefeuille A est > nb de






titre
du portefeuille B aucun soucis mon "left outer join" est
bien tourné dans le bon sens..

Or qd c'est linverse , cela ne va plus car je n'ai plus
les titres de l'autres portefeuille.

je voudrais en fait avoir le maximum du nb de titres ...

en fait je sais pas comment faire mon left outer join ;
dans quel sens ???
et la je me perds je sais pas quoi faire


pouvez vous m'aider SVP ?


.



.



.



Avatar
Sylvain Lafontaine
Non, (+)=(+) ne fonctionnera pas.

Vous devez utiliser la nouvelle syntaxe ANSI. Une recherche sur Google avec
Full Outer Join donne l'url suivant en tout début de la liste:
http://www.oreillynet.com/pub/a/network/2002/04/23/fulljoin.html

Vous devriez également utiliser des alias pour les noms des tables dans vos
requêtes et laisser tomber l'utilisation intensive des majuscules; vos
requêtes vont être plus lisibles.

S. L.

"Chnew" wrote in message
news:bc8d01c479fd$2ac9c6d0$
c'est bon ja i reussi merci

par contre quel est la syntaxe ansi pour le full outer
join ?

(+) = (+) ne fonctionne pas ....


SELECT

-- PARTIE SUR LES INFOS GENRALES BONDS
PORTFOLIO_CODE_PTFOLIO ,
BENCHMARK_CODE_BCHMK ,
DECODE
(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.BONDS_IDBCHMK,PTFOLIO.B
ONDS_IDPTFOLIO) bonds_id ,
DECODE(PTFOLIO.BONDS_IDPTFOLIO,NULL,'N','Y') P ,
DECODE(BCHMK.BONDS_IDBCHMK,NULL,'N','Y') B ,
DECODE(PTFHOLDVERS_COMMENT_PTFOLIO,NULL,0,1) Com ,
DECODE
(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.ISIN,PTFOLIO.ISIN_PTFOL
IO) ISIN,
DECODE
(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.ISSUER_BCHMK,PTFOLIO.IS
SUER_PTFOLIO) ISSUER,
DECODE
(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.CPN_BCHMK,PTFOLIO.CPN_P
TFOLIO) COUPON,
DECODE
(BONDS_IDPTFOLIO,NULL,BCHMK.Maturity_BCHMK,PTFOLIO.Maturity
_PTFOLIO) Maturity,
DECODE
(BONDS_IDPTFOLIO,NULL,BCHMK.Currency_BCHMK,PTFOLIO.Currency
_PTFOLIO) Currency,
DECODE
(PTFOLIO.Price_PTFOLIO,NULL,BCHMK.PRICE_BCHMK,PTFOLIO.Price
_PTFOLIO) Price,

-- PARTIE SUR LES PORTFOLIO
PTFOLIO.QTE_PTFOLIO PTF_HOLDING,
PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO) PTF_TOTAL_VALUE,
(PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO)) / (BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK)) PTF_WEIGHT,
PTFOLIO.MDuration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))) PTF_CTMD,
PTFOLIO.Duration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))) PTF_CTD,

-- PARTIE SUR LES BENCHMARKS
BCHMK.QTE_BCHMK BENCH_HOLDING ,
BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK) BENCH_TOTAL_VALUE,
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO))
BENCH_WEIGHT,
BCHMK.MODDURATION_BCHMK *((BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK))/
(PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO))) BENCH_CTMD ,
BCHMK.DURATION_BCHMK *((BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK))/
(PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO))) BENCH_CTD ,

-- PARTIE SUR LES DELTAS
((PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO)) / (BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK))) -
((BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)))
DELTA_WEIGHT,
(PTFOLIO.MDuration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK)))) - (BCHMK.MODDURATION_BCHMK *
((BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO))))
DELTA_CTMD,
(PTFOLIO.Duration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK)))) - (BCHMK.DURATION_BCHMK *
((BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO))))
DELTA_CTD ,

DECODE
(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.ACCRUED_BCHMK,PTFOLIO.A
CCRUED_PTFOLIO) ACCRUED ,
DECODE
(BONDS_IDPTFOLIO,NULL,BCHMK.NextCPN_BCHMK,PTFOLIO.NextCPN_P
TFOLIO) NextCPN,
DECODE
(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.YIELD_BCHMK,PTFOLIO.YIE
LD_PTFOLIO) YIELD ,
(TO_DATE((DECODE
(BONDS_IDPTFOLIO,NULL,BCHMK.Maturity_BCHMK,PTFOLIO.Maturity
_PTFOLIO)-3),'DD-MM-YY') - TO_DATE('01/01/2004','DD-MM-
YY'))/365

From

(
SELECT
PORTFOLIO.PORTFOLIO_CODE PORTFOLIO_CODE_PTFOLIO,
PORTFOLIO.PORTFOLIO_LONGNAME,
PTFHOLDINGVERSION.PTFHOLDVERS_ID,
PTFHOLDINGVERSION.PTFHOLDVERS_DATE ,
PTFHOLDINGVERSION.PTFHOLDVERS_COMMENT
PTFHOLDVERS_COMMENT_PTFOLIO ,
PTFHOLDING.PTFHOLDING_ID,
PTFHOLDING.PTFHOLDING_QUANTITY QTE_PTFOLIO,
INSTRUMENT.INSTRUMENT_ID,
INSTRUMENT.INSTRUMENT_LONGNAME,
BONDS.BONDS_ID BONDS_IDPTFOLIO,
BONDS.CURRENCY_CODE Currency_PTFOLIO,
BONDS.ISSUER_CODE Issuer_PTFOLIO,
BONDS.BONDS_CPNRATE Cpn_PTFOLIO,
BONDS.BONDS_MATURITY Maturity_PTFOLIO,
BONDS.BONDS_NEXTCPN NextCpn_PTFOLIO ,
INSTRUMENTPRICE.INSTRUMENTPRICE_ID,
INSTRUMENTPRICE.INSTRUMENTPRICE_MIDPRICE Price_PTFOLIO,
BONDS.BONDS_ISINCODE ISIN_PTFOLIO ,
INSTRUMENTPRICE.INSTRUMENTPRICE_ACCRUED Accrued_PTFOLIO,
INSTRUMENTPRICE.INSTRUMENTPRICE_YIELD Yield_PTFOLIO,
INSTRUMENTPRICE.INSTRUMENTPRICE_DURATION Duration_PTFOLIO ,
INSTRUMENTPRICE.INSTRUMENTPRICE_MODDURATION
MDuration_PTFOLIO
From
((((PORTFOLIO INNER JOIN PTFHOLDINGVERSION ON
PORTFOLIO.PORTFOLIO_CODE PTFHOLDINGVERSION.PORTFOLIO_CODE)
INNER JOIN PTFHOLDING ON PTFHOLDINGVERSION.PTFHOLDVERS_ID
= PTFHOLDING.PTFHOLDVERS_ID)
LEFT OUTER JOIN INSTRUMENT ON PTFHOLDING.INSTRUMENT_ID INSTRUMENT.INSTRUMENT_ID)
INNER JOIN BONDS ON INSTRUMENT.INSTRUMENT_ID BONDS.INSTRUMENT_ID)
LEFT OUTER JOIN INSTRUMENTPRICE ON
INSTRUMENT.INSTRUMENT_ID = INSTRUMENTPRICE.INSTRUMENT_ID
WHERE PTFHOLDINGVERSION.PTFHOLDVERS_DATE=(SELECT MAX
(PTFHOLDVERS_DATE) FROM PTFHOLDINGVERSION WHERE
PORTFOLIO_CODE = PORTFOLIO.PORTFOLIO_CODE AND
PTFHOLDVERS_RECSTATUS = 'VERIFY')
) PTFOLIO FULL OUTER JOIN (
SELECT
BENCHMARK.BENCHMARK_CODE BENCHMARK_CODE_BCHMK,
BENCHMARK.BENCHMARK_LONGNAME,
BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_ID,
BENCHHOLDING_VERSION.BENCHMARK_CODE,
BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_DATE ,
BENCHHOLDING.BENCHHOLDING_ID ,
BENCHHOLDING.BENCHHOLDING_QUANTITY QTE_BCHMK ,
INSTRUMENT.INSTRUMENT_ID,
BONDS.BONDS_ID BONDS_IDBCHMK,
BONDS.BONDS_ISINCODE ISIN ,
BONDS.ISSUER_CODE ISSUER_BCHMK,
BONDS.BONDS_CPNRATE Cpn_BCHMK,
BONDS.CURRENCY_CODE Currency_BCHMK,
BONDS.BONDS_MATURITY Maturity_BCHMK,
BONDS.BONDS_NEXTCPN NextCpn_BCHMK ,
INSTRUMENTPRICE.INSTRUMENTPRICE_MIDPRICE PRICE_BCHMK,

INSTRUMENTPRICE.INSTRUMENTPRICE_ACCRUED ACCRUED_BCHMK,
INSTRUMENTPRICE.INSTRUMENTPRICE_YIELD YIELD_BCHMK,
INSTRUMENTPRICE.INSTRUMENTPRICE_DURATION DURATION_BCHMK ,
INSTRUMENTPRICE.INSTRUMENTPRICE_MODDURATION
MODDURATION_BCHMK
From
((((BENCHMARK INNER JOIN BENCHHOLDING_VERSION ON
BENCHMARK.BENCHMARK_CODE BENCHHOLDING_VERSION.BENCHMARK_CODE)
INNER JOIN BENCHHOLDING ON
BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_ID BENCHHOLDING.BENCHHOLDING_VERSION_ID)
LEFT OUTER JOIN INSTRUMENT ON BENCHHOLDING.INSTRUMENT_ID INSTRUMENT.INSTRUMENT_ID)
INNER JOIN BONDS ON INSTRUMENT.INSTRUMENT_ID BONDS.INSTRUMENT_ID)
LEFT OUTER JOIN INSTRUMENTPRICE ON
INSTRUMENT.INSTRUMENT_ID = INSTRUMENTPRICE.INSTRUMENT_ID
WHERE BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_DATE (SELECT MAX(BENCHHOLDING_VERSION_DATE) FROM
BENCHHOLDING_VERSION WHERE BENCHMARK_CODE BENCHMARK.BENCHMARK_CODE AND BENCHHOLDING_VERSION_STATUS
= 'VERIFY')
) BCHMK on BCHMK.BONDS_IDBCHMK = PTFOLIO.BONDS_IDPTFOLIO





-----Message d'origine-----

Je n'arrive pas a effectuer ma requete FOJ !
Je ne vois pas comment faire ...
pour l'instant c'est sous oracle mais voici la


requete ....

SELECT

-- PARTIE SUR LES INFOS GENRALES BONDS
PORTFOLIO_CODE_PTFOLIO ,
BENCHMARK_CODE_BCHMK ,
DECODE



(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.BONDS_IDBCHMK,PTFOLIO.B
ONDS_IDPTFOLIO) bonds_id ,
DECODE(PTFOLIO.BONDS_IDPTFOLIO,NULL,'N','Y') P ,
DECODE(BCHMK.BONDS_IDBCHMK,NULL,'N','Y') B ,
DECODE(PTFHOLDVERS_COMMENT_PTFOLIO,NULL,0,1) Com ,
DECODE



(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.ISIN,PTFOLIO.ISIN_PTFOL
IO) ISIN,
DECODE



(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.ISSUER_BCHMK,PTFOLIO.IS
SUER_PTFOLIO) ISSUER,
DECODE



(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.CPN_BCHMK,PTFOLIO.CPN_P
TFOLIO) COUPON,
DECODE



(BONDS_IDPTFOLIO,NULL,BCHMK.Maturity_BCHMK,PTFOLIO.Maturity
_PTFOLIO) Maturity,
DECODE



(BONDS_IDPTFOLIO,NULL,BCHMK.Currency_BCHMK,PTFOLIO.Currency
_PTFOLIO) Currency,
DECODE



(PTFOLIO.Price_PTFOLIO,NULL,BCHMK.PRICE_BCHMK,PTFOLIO.Price
_PTFOLIO) Price,

-- PARTIE SUR LES PORTFOLIO
PTFOLIO.QTE_PTFOLIO PTF_HOLDING,
PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO) PTF_TOTAL_VALUE,
(PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO)) / (BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK)) PTF_WEIGHT,
PTFOLIO.MDuration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))) PTF_CTMD,
PTFOLIO.Duration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))) PTF_CTD,

-- PARTIE SUR LES BENCHMARKS
BCHMK.QTE_BCHMK BENCH_HOLDING ,
BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK) BENCH_TOTAL_VALUE,
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO))
BENCH_WEIGHT,
BCHMK.MODDURATION_BCHMK *((BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK))/
(PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO))) BENCH_CTMD ,
BCHMK.DURATION_BCHMK *((BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK))/
(PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO))) BENCH_CTD ,

-- PARTIE SUR LES DELTAS
((PTFOLIO.QTE_PTFOLIO * (PTFOLIO.Price_PTFOLIO +
PTFOLIO.Accrued_PTFOLIO)) / (BCHMK.QTE_BCHMK *
(BCHMK.PRICE_BCHMK + BCHMK.ACCRUED_BCHMK))) -
((BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)))
DELTA_WEIGHT,
(PTFOLIO.MDuration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK)))) - (BCHMK.MODDURATION_BCHMK *
((BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO))))
DELTA_CTMD,
(PTFOLIO.Duration_PTFOLIO * ((PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO)) /
(BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK)))) - (BCHMK.DURATION_BCHMK *
((BCHMK.QTE_BCHMK * (BCHMK.PRICE_BCHMK +
BCHMK.ACCRUED_BCHMK))/(PTFOLIO.QTE_PTFOLIO *
(PTFOLIO.Price_PTFOLIO + PTFOLIO.Accrued_PTFOLIO))))
DELTA_CTD ,

DECODE



(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.ACCRUED_BCHMK,PTFOLIO.A
CCRUED_PTFOLIO) ACCRUED ,
DECODE



(BONDS_IDPTFOLIO,NULL,BCHMK.NextCPN_BCHMK,PTFOLIO.NextCPN_P
TFOLIO) NextCPN,
DECODE



(PTFOLIO.BONDS_IDPTFOLIO,NULL,BCHMK.YIELD_BCHMK,PTFOLIO.YIE
LD_PTFOLIO) YIELD ,
(TO_DATE((DECODE



(BONDS_IDPTFOLIO,NULL,BCHMK.Maturity_BCHMK,PTFOLIO.Maturity
_PTFOLIO)-3),'DD-MM-YY') - TO_DATE('01/01/2004','DD-MM-
YY'))/365

From
(
SELECT
PORTFOLIO.PORTFOLIO_CODE PORTFOLIO_CODE_PTFOLIO,
PORTFOLIO.PORTFOLIO_LONGNAME,
PTFHOLDINGVERSION.PTFHOLDVERS_ID,
PTFHOLDINGVERSION.PTFHOLDVERS_DATE ,
PTFHOLDINGVERSION.PTFHOLDVERS_COMMENT
PTFHOLDVERS_COMMENT_PTFOLIO ,
PTFHOLDING.PTFHOLDING_ID,
PTFHOLDING.PTFHOLDING_QUANTITY QTE_PTFOLIO,
INSTRUMENT.INSTRUMENT_ID,
INSTRUMENT.INSTRUMENT_LONGNAME,
BONDS.BONDS_ID BONDS_IDPTFOLIO,
BONDS.CURRENCY_CODE Currency_PTFOLIO,
BONDS.ISSUER_CODE Issuer_PTFOLIO,
BONDS.BONDS_CPNRATE Cpn_PTFOLIO,
BONDS.BONDS_MATURITY Maturity_PTFOLIO,
BONDS.BONDS_NEXTCPN NextCpn_PTFOLIO ,
INSTRUMENTPRICE.INSTRUMENTPRICE_ID,
INSTRUMENTPRICE.INSTRUMENTPRICE_MIDPRICE Price_PTFOLIO,
BONDS.BONDS_ISINCODE ISIN_PTFOLIO ,
INSTRUMENTPRICE.INSTRUMENTPRICE_ACCRUED Accrued_PTFOLIO,
INSTRUMENTPRICE.INSTRUMENTPRICE_YIELD Yield_PTFOLIO,
INSTRUMENTPRICE.INSTRUMENTPRICE_DURATION


Duration_PTFOLIO ,
INSTRUMENTPRICE.INSTRUMENTPRICE_MODDURATION
MDuration_PTFOLIO
From
((((PORTFOLIO INNER JOIN PTFHOLDINGVERSION ON
PORTFOLIO.PORTFOLIO_CODE >PTFHOLDINGVERSION.PORTFOLIO_CODE)
INNER JOIN PTFHOLDING ON PTFHOLDINGVERSION.PTFHOLDVERS_ID
= PTFHOLDING.PTFHOLDVERS_ID)
LEFT OUTER JOIN INSTRUMENT ON PTFHOLDING.INSTRUMENT_ID >INSTRUMENT.INSTRUMENT_ID)
INNER JOIN BONDS ON INSTRUMENT.INSTRUMENT_ID >BONDS.INSTRUMENT_ID)
LEFT OUTER JOIN INSTRUMENTPRICE ON
INSTRUMENT.INSTRUMENT_ID = INSTRUMENTPRICE.INSTRUMENT_ID
WHERE PTFHOLDINGVERSION.PTFHOLDVERS_DATE=(SELECT MAX
(PTFHOLDVERS_DATE) FROM PTFHOLDINGVERSION WHERE
PORTFOLIO_CODE = PORTFOLIO.PORTFOLIO_CODE AND
PTFHOLDVERS_RECSTATUS = 'VERIFY')
)
PTFOLIO ,
(
SELECT
BENCHMARK.BENCHMARK_CODE BENCHMARK_CODE_BCHMK,
BENCHMARK.BENCHMARK_LONGNAME,
BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_ID,
BENCHHOLDING_VERSION.BENCHMARK_CODE,
BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_DATE ,
BENCHHOLDING.BENCHHOLDING_ID ,
BENCHHOLDING.BENCHHOLDING_QUANTITY QTE_BCHMK ,
INSTRUMENT.INSTRUMENT_ID,
BONDS.BONDS_ID BONDS_IDBCHMK,
BONDS.BONDS_ISINCODE ISIN ,
BONDS.ISSUER_CODE ISSUER_BCHMK,
BONDS.BONDS_CPNRATE Cpn_BCHMK,
BONDS.CURRENCY_CODE Currency_BCHMK,
BONDS.BONDS_MATURITY Maturity_BCHMK,
BONDS.BONDS_NEXTCPN NextCpn_BCHMK ,
INSTRUMENTPRICE.INSTRUMENTPRICE_MIDPRICE PRICE_BCHMK,

INSTRUMENTPRICE.INSTRUMENTPRICE_ACCRUED ACCRUED_BCHMK,
INSTRUMENTPRICE.INSTRUMENTPRICE_YIELD YIELD_BCHMK,
INSTRUMENTPRICE.INSTRUMENTPRICE_DURATION DURATION_BCHMK ,
INSTRUMENTPRICE.INSTRUMENTPRICE_MODDURATION
MODDURATION_BCHMK
From
((((BENCHMARK INNER JOIN BENCHHOLDING_VERSION ON
BENCHMARK.BENCHMARK_CODE >BENCHHOLDING_VERSION.BENCHMARK_CODE)
INNER JOIN BENCHHOLDING ON
BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_ID >BENCHHOLDING.BENCHHOLDING_VERSION_ID)
LEFT OUTER JOIN INSTRUMENT ON BENCHHOLDING.INSTRUMENT_ID


>INSTRUMENT.INSTRUMENT_ID)
INNER JOIN BONDS ON INSTRUMENT.INSTRUMENT_ID >BONDS.INSTRUMENT_ID)
LEFT OUTER JOIN INSTRUMENTPRICE ON
INSTRUMENT.INSTRUMENT_ID = INSTRUMENTPRICE.INSTRUMENT_ID
WHERE BENCHHOLDING_VERSION.BENCHHOLDING_VERSION_DATE >(SELECT MAX(BENCHHOLDING_VERSION_DATE) FROM
BENCHHOLDING_VERSION WHERE BENCHMARK_CODE >BENCHMARK.BENCHMARK_CODE AND BENCHHOLDING_VERSION_STATUS
= 'VERIFY')
)
BCHMK

WHERE BCHMK.BONDS_IDBCHMK (+)= PTFOLIO.BONDS_IDPTFOLIO




-----Message d'origine-----
Merci de votre réponse....


cependant un union jy avais pensé mais cela doublerait




la
longueur de ma requete qui est déja extremement longue .


S.R


-----Message d'origine-----
Ce n'est ni un « Left Outer Join » ou un « Right Outer


Join » mais un « Full
Outer Join » que vous devez prendre.

Pour la syntaxe, vous devez utilisez la nouvelle


notation ANSI plutôt que
l'ancienne (+= et =+) car cette dernière ne supporte




pas
les FOJ sur la
plupart des serveurs SQL.

À titre indicatif, vous pouvez également simuler un FOJ


en utilisant une
UNION avec deux requêtes (une Left et une Right).

S. L.

"Chnew" wrote in


message
news:bc8501c479a0$b604c270$
Bonjour,

Voici un petit probleme de requete

Je dois comparer 2 portefeuilles de titres.
et calculer pour chaque ligne la difference entre les 2.
Or le portefeuille ne possede pas toujours les meme




titres
qu'un autre portefeuille.

Je m'explique :

schematiquement,

je fais un select sur ma table des






titres_du_Portefeuille
dont le portefeuille_name est "A" ----> SELECT A

je fais un 2 eme select sur ma table des
titres_du_Portefeuille dont le portefeuille_name




est "B" -
-
SELECT B



j'ai donc tous les titres que comporte mes






portefeuilles.
(c'est tres schematique ma requete fais 50 lignes avec
plein de calcul etc ...)

pour pouvoir comparer mes 2 portefeuilles , je






transforme
donc mes requetes ci dessus en table virtuelle

Je fais donc

SELECT A, B, C, D ...

FROM

(SELECT A) AS TABLE_VIRTUEL1 , (SELECT B) AS


TABLE_VIRTUEL2

WHERE

TABLE_VIRTUEL1.CODE_DE_MATABLE1 (+) >>>TABLE_VIRTUEL2.CODE_DE_MATABLE2


mes clés st compatibles bien entendu....


Voici mon probleme :

qd le nb de titre de mon portefeuille A est > nb de






titre
du portefeuille B aucun soucis mon "left outer join" est
bien tourné dans le bon sens..

Or qd c'est linverse , cela ne va plus car je n'ai plus
les titres de l'autres portefeuille.

je voudrais en fait avoir le maximum du nb de titres ...

en fait je sais pas comment faire mon left outer join ;
dans quel sens ???
et la je me perds je sais pas quoi faire


pouvez vous m'aider SVP ?


.



.



.