SELECT B
SELECT B
SELECT B
-----Message d'origine-----
Ce n'est ni un « Left Outer Join » ou un « Right Outer
Outer Join » que vous devez prendre.
Pour la syntaxe, vous devez utilisez la nouvelle
l'ancienne (+= et =+) car cette dernière ne supporte pas
plupart des serveurs SQL.
À titre indicatif, vous pouvez également simuler un FOJ
UNION avec deux requêtes (une Left et une Right).
S. L.
"Chnew" wrote in
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
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 ?
.
-----Message d'origine-----
Ce n'est ni un « Left Outer Join » ou un « Right Outer
Outer Join » que vous devez prendre.
Pour la syntaxe, vous devez utilisez la nouvelle
l'ancienne (+= et =+) car cette dernière ne supporte pas
plupart des serveurs SQL.
À titre indicatif, vous pouvez également simuler un FOJ
UNION avec deux requêtes (une Left et une Right).
S. L.
"Chnew" <sompharack.rintharamy@dexia-am.com> wrote in
news:bc8501c479a0$b604c270$a501280a@phx.gbl...
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
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 ?
.
-----Message d'origine-----
Ce n'est ni un « Left Outer Join » ou un « Right Outer
Outer Join » que vous devez prendre.
Pour la syntaxe, vous devez utilisez la nouvelle
l'ancienne (+= et =+) car cette dernière ne supporte pas
plupart des serveurs SQL.
À titre indicatif, vous pouvez également simuler un FOJ
UNION avec deux requêtes (une Left et une Right).
S. L.
"Chnew" wrote in
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
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 ?
.
-----Message d'origine-----
Ce n'est ni un « Left Outer Join » ou un « Right Outer
Outer Join » que vous devez prendre.
Pour la syntaxe, vous devez utilisez la nouvelle
l'ancienne (+= et =+) car cette dernière ne supporte
plupart des serveurs SQL.
À titre indicatif, vous pouvez également simuler un FOJ
UNION avec deux requêtes (une Left et une Right).
S. L.
"Chnew" wrote in
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
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
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
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 ?
.
-----Message d'origine-----
Ce n'est ni un « Left Outer Join » ou un « Right Outer
Outer Join » que vous devez prendre.
Pour la syntaxe, vous devez utilisez la nouvelle
l'ancienne (+= et =+) car cette dernière ne supporte
plupart des serveurs SQL.
À titre indicatif, vous pouvez également simuler un FOJ
UNION avec deux requêtes (une Left et une Right).
S. L.
"Chnew" <sompharack.rintharamy@dexia-am.com> wrote in
news:bc8501c479a0$b604c270$a501280a@phx.gbl...
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
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
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
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 ?
.
-----Message d'origine-----
Ce n'est ni un « Left Outer Join » ou un « Right Outer
Outer Join » que vous devez prendre.
Pour la syntaxe, vous devez utilisez la nouvelle
l'ancienne (+= et =+) car cette dernière ne supporte
plupart des serveurs SQL.
À titre indicatif, vous pouvez également simuler un FOJ
UNION avec deux requêtes (une Left et une Right).
S. L.
"Chnew" wrote in
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
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
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
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 ?
.
-----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 « FullOuter Join » que vous devez prendre.
Pour la syntaxe, vous devez utilisez la nouvelle
notation ANSI plutôt quel'ancienne (+= et =+) car cette dernière ne supporte
les FOJ sur laplupart des serveurs SQL.
À titre indicatif, vous pouvez également simuler un FOJ
en utilisant uneUNION avec deux requêtes (une Left et une Right).
S. L.
"Chnew" wrote in
messagenews: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
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
-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 ?
.
.
-----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
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" <sompharack.rintharamy@dexia-am.com> wrote in
message
news:bc8501c479a0$b604c270$a501280a@phx.gbl...
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
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
-
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 ?
.
.
-----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 « FullOuter Join » que vous devez prendre.
Pour la syntaxe, vous devez utilisez la nouvelle
notation ANSI plutôt quel'ancienne (+= et =+) car cette dernière ne supporte
les FOJ sur laplupart des serveurs SQL.
À titre indicatif, vous pouvez également simuler un FOJ
en utilisant uneUNION avec deux requêtes (une Left et une Right).
S. L.
"Chnew" wrote in
messagenews: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
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
-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 ?
.
.
-----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
SELECT
-- PARTIE SUR LES INFOS GENRALES BONDS
PORTFOLIO_CODE_PTFOLIO ,
BENCHMARK_CODE_BCHMK ,
DECODE
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
IO) ISIN,
DECODE
SUER_PTFOLIO) ISSUER,
DECODE
TFOLIO) COUPON,
DECODE
_PTFOLIO) Maturity,
DECODE
_PTFOLIO) Currency,
DECODE
_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
CCRUED_PTFOLIO) ACCRUED ,
DECODE
TFOLIO) NextCPN,
DECODE
LD_PTFOLIO) YIELD ,
(TO_DATE((DECODE
_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
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
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 « FullOuter Join » que vous devez prendre.
Pour la syntaxe, vous devez utilisez la nouvelle
notation ANSI plutôt quel'ancienne (+= et =+) car cette dernière ne supporte
pasles FOJ sur laplupart des serveurs SQL.
À titre indicatif, vous pouvez également simuler un FOJ
en utilisant uneUNION avec deux requêtes (une Left et une Right).
S. L.
"Chnew" wrote in
messagenews: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
titresqu'un autre portefeuille.
Je m'explique :
schematiquement,
je fais un select sur ma table des
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
(c'est tres schematique ma requete fais 50 lignes avec
plein de calcul etc ...)
pour pouvoir comparer mes 2 portefeuilles , je
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
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 ?
.
.
.
-----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
SELECT
-- PARTIE SUR LES INFOS GENRALES BONDS
PORTFOLIO_CODE_PTFOLIO ,
BENCHMARK_CODE_BCHMK ,
DECODE
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
IO) ISIN,
DECODE
SUER_PTFOLIO) ISSUER,
DECODE
TFOLIO) COUPON,
DECODE
_PTFOLIO) Maturity,
DECODE
_PTFOLIO) Currency,
DECODE
_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
CCRUED_PTFOLIO) ACCRUED ,
DECODE
TFOLIO) NextCPN,
DECODE
LD_PTFOLIO) YIELD ,
(TO_DATE((DECODE
_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
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
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" <sompharack.rintharamy@dexia-am.com> wrote in
message
news:bc8501c479a0$b604c270$a501280a@phx.gbl...
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
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
(c'est tres schematique ma requete fais 50 lignes avec
plein de calcul etc ...)
pour pouvoir comparer mes 2 portefeuilles , je
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
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 ?
.
.
.
-----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
SELECT
-- PARTIE SUR LES INFOS GENRALES BONDS
PORTFOLIO_CODE_PTFOLIO ,
BENCHMARK_CODE_BCHMK ,
DECODE
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
IO) ISIN,
DECODE
SUER_PTFOLIO) ISSUER,
DECODE
TFOLIO) COUPON,
DECODE
_PTFOLIO) Maturity,
DECODE
_PTFOLIO) Currency,
DECODE
_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
CCRUED_PTFOLIO) ACCRUED ,
DECODE
TFOLIO) NextCPN,
DECODE
LD_PTFOLIO) YIELD ,
(TO_DATE((DECODE
_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
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
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 « FullOuter Join » que vous devez prendre.
Pour la syntaxe, vous devez utilisez la nouvelle
notation ANSI plutôt quel'ancienne (+= et =+) car cette dernière ne supporte
pasles FOJ sur laplupart des serveurs SQL.
À titre indicatif, vous pouvez également simuler un FOJ
en utilisant uneUNION avec deux requêtes (une Left et une Right).
S. L.
"Chnew" wrote in
messagenews: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
titresqu'un autre portefeuille.
Je m'explique :
schematiquement,
je fais un select sur ma table des
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
(c'est tres schematique ma requete fais 50 lignes avec
plein de calcul etc ...)
pour pouvoir comparer mes 2 portefeuilles , je
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
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 ?
.
.
.
-----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
SELECT
-- PARTIE SUR LES INFOS GENRALES BONDS
PORTFOLIO_CODE_PTFOLIO ,
BENCHMARK_CODE_BCHMK ,
DECODE
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
IO) ISIN,
DECODE
SUER_PTFOLIO) ISSUER,
DECODE
TFOLIO) COUPON,
DECODE
_PTFOLIO) Maturity,
DECODE
_PTFOLIO) Currency,
DECODE
_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
CCRUED_PTFOLIO) ACCRUED ,
DECODE
TFOLIO) NextCPN,
DECODE
LD_PTFOLIO) YIELD ,
(TO_DATE((DECODE
_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
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
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
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 « FullOuter Join » que vous devez prendre.
Pour la syntaxe, vous devez utilisez la nouvelle
notation ANSI plutôt quel'ancienne (+= et =+) car cette dernière ne supporte
pasles FOJ sur laplupart des serveurs SQL.
À titre indicatif, vous pouvez également simuler un FOJ
en utilisant uneUNION avec deux requêtes (une Left et une Right).
S. L.
"Chnew" wrote in
messagenews: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
titresqu'un autre portefeuille.
Je m'explique :
schematiquement,
je fais un select sur ma table des
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
(c'est tres schematique ma requete fais 50 lignes avec
plein de calcul etc ...)
pour pouvoir comparer mes 2 portefeuilles , je
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
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 ?
.
.
.
-----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
SELECT
-- PARTIE SUR LES INFOS GENRALES BONDS
PORTFOLIO_CODE_PTFOLIO ,
BENCHMARK_CODE_BCHMK ,
DECODE
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
IO) ISIN,
DECODE
SUER_PTFOLIO) ISSUER,
DECODE
TFOLIO) COUPON,
DECODE
_PTFOLIO) Maturity,
DECODE
_PTFOLIO) Currency,
DECODE
_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
CCRUED_PTFOLIO) ACCRUED ,
DECODE
TFOLIO) NextCPN,
DECODE
LD_PTFOLIO) YIELD ,
(TO_DATE((DECODE
_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
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
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
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" <sompharack.rintharamy@dexia-am.com> wrote in
message
news:bc8501c479a0$b604c270$a501280a@phx.gbl...
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
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
(c'est tres schematique ma requete fais 50 lignes avec
plein de calcul etc ...)
pour pouvoir comparer mes 2 portefeuilles , je
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
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 ?
.
.
.
-----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
SELECT
-- PARTIE SUR LES INFOS GENRALES BONDS
PORTFOLIO_CODE_PTFOLIO ,
BENCHMARK_CODE_BCHMK ,
DECODE
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
IO) ISIN,
DECODE
SUER_PTFOLIO) ISSUER,
DECODE
TFOLIO) COUPON,
DECODE
_PTFOLIO) Maturity,
DECODE
_PTFOLIO) Currency,
DECODE
_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
CCRUED_PTFOLIO) ACCRUED ,
DECODE
TFOLIO) NextCPN,
DECODE
LD_PTFOLIO) YIELD ,
(TO_DATE((DECODE
_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
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
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
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 « FullOuter Join » que vous devez prendre.
Pour la syntaxe, vous devez utilisez la nouvelle
notation ANSI plutôt quel'ancienne (+= et =+) car cette dernière ne supporte
pasles FOJ sur laplupart des serveurs SQL.
À titre indicatif, vous pouvez également simuler un FOJ
en utilisant uneUNION avec deux requêtes (une Left et une Right).
S. L.
"Chnew" wrote in
messagenews: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
titresqu'un autre portefeuille.
Je m'explique :
schematiquement,
je fais un select sur ma table des
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
(c'est tres schematique ma requete fais 50 lignes avec
plein de calcul etc ...)
pour pouvoir comparer mes 2 portefeuilles , je
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
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 ?
.
.
.