SQL需要将outerjoin添加到下面的查询中

时间:2017-03-10 13:55:45

标签: sql sql-server

在下面的SQL中:

我需要在结果中添加两列

1) Local_code     
2)Local_CPTY_SYS_ID,

位于HSBC_LOCAL_INVOL_PARTY表格中。

到目前为止,我已尝试添加

select local_code from HSBC_LOCAL_INVOL_PARTY
 h join t_cdr T2 
on T2.counterparty_new = h.entity_code

但这不起作用。它最终需要一个显式的外连接。请帮忙

SELECT
T2.counterparty_new,
T2.bis_entity_type_original,
T2.counterparty_new_desc,
T2.counterparty_new_attribute_6,
T2.method_original,
T2.netting_agreement_reference, 
T2.internal_rating_new, 
T2.counterparty_type_original, 
T2.obligor_grade_new, 
T2.pd_pre_floor_new,
T2.pd_new,
T2.lgd, 
T2.rwa 
from  t_cdr T2,
(
SELECT * FROM (
SELECT
FINAL.FILTER_MARKER,
FINAL.entity_code
FROM (
SELECT 
FILTER_POP.entity_code,
FILTER_POP.FILTER_MARKER
FROM (
SELECT
CASE 
WHEN CONCAT(Dlgd,unfloored_lgd)  IS NOT NULL
THEN  'EXCLUDE'
WHEN CONCAT(Dlgd,unfloored_lgd)  IS NULL
THEN 'INCLUDE'
END AS  FILTER_MARKER,
entity_code, 
Dlgd,
unfloored_lgd
FROM 
HSBC_LOCAL_INVOL_PARTY 
WHERE 
 ((HSBC_LOCAL_INVOL_PARTY.entity_code) NOT LIKE '%DUM%')
AND 
((HSBC_LOCAL_INVOL_PARTY.entity_code) NOT LIKE '%HSBC%')
)  FILTER_POP
GROUP BY 
FILTER_POP.entity_code,
FILTER_POP.FILTER_MARKER) FINAL
GROUP BY 
FINAL.FILTER_MARKER,
FINAL.entity_code
ORDER BY 
FINAL.entity_code)
PIVOT
(
COUNT(FILTER_MARKER)
FOR FILTER_MARKER IN ('INCLUDE' AS INCLUDE,'EXCLUDE' AS EXCLUDE)
)
WHERE INCLUDE = 1 AND EXCLUDE = 0
) ENTITY_FILTER
WHERE ENTITY_FILTER.entity_code = T2.counterparty_new
AND T2.method_original = 'ADV' 
ORDER  BY T2.rwa DESC 

1 个答案:

答案 0 :(得分:0)

解决它:看看最后几行。花了一段时间,但对性能进行了优化。

SELECT
T2.counterparty_new,
T2.bis_entity_type_original,
T2.counterparty_new_desc,
T2.counterparty_new_attribute_6,
T2.method_original,
T2.netting_agreement_reference, 
T2.internal_rating_new, 
T2.counterparty_type_original, 
T2.obligor_grade_new, 
T2.pd_pre_floor_new,
T2.pd_new,
T2.lgd, 
HSBC_LOCAL_INVOL_PARTY.local_code,
T2.rwa 
from  t_cdr T2,
(
SELECT * FROM (
SELECT
FINAL.FILTER_MARKER,
FINAL.entity_code
FROM (
SELECT 
FILTER_POP.entity_code,
FILTER_POP.FILTER_MARKER
FROM (
SELECT
CASE 
WHEN CONCAT(Dlgd,unfloored_lgd)  IS NOT NULL
THEN  'EXCLUDE'
WHEN CONCAT(Dlgd,unfloored_lgd)  IS NULL
THEN 'INCLUDE'
END AS  FILTER_MARKER,
entity_code, 
Dlgd,
unfloored_lgd
FROM 
HSBC_LOCAL_INVOL_PARTY 
WHERE 
 ((HSBC_LOCAL_INVOL_PARTY.entity_code) NOT LIKE '%DUM%')
AND 
((HSBC_LOCAL_INVOL_PARTY.entity_code) NOT LIKE '%HSBC%')
)  FILTER_POP
GROUP BY 
FILTER_POP.entity_code,
FILTER_POP.FILTER_MARKER) FINAL
GROUP BY 
FINAL.FILTER_MARKER,
FINAL.entity_code
ORDER BY 
FINAL.entity_code)
PIVOT
(
COUNT(FILTER_MARKER)
FOR FILTER_MARKER IN ('INCLUDE' AS INCLUDE,'EXCLUDE' AS EXCLUDE)
)
WHERE INCLUDE = 1 AND EXCLUDE = 0
) ENTITY_FILTER,HSBC_LOCAL_INVOL_PARTY
WHERE ENTITY_FILTER.entity_code = T2.counterparty_new 
AND ENTITY_FILTER.entity_code = HSBC_LOCAL_INVOL_PARTY.entity_code(+)
AND T2.method_original = 'ADV' 
ORDER  BY T2.rwa DESC