2013-07-14 5 views
-2
SELECT TRD.PKG_ID||'_'||TRD_CONT_NBR||'_'||LEG.TRD_LEG_NBR||'_'|| TRD.TRD_ID||'_'||CF.CURR_CODE||'_'||cf.cflw_date||'_'||CF.CFLW_TYPE_CODE 
||'_'||CF.CFLW_STATUS_CODE as Surrogate_key 
, CF.EFF_DATE, TRD.PKG_ID, TRD_CONT_NBR, TRD.SRCE_TRD_ID 
, LEG.TRD_LEG_NBR, TRD.TRD_ID, LEG.TRD_LEG_ID 
, CF.CURR_CODE, cf.cflw_date, CF.TRD_CURR_CASH_FLOW_AMT 
, CF.INT_RATE, cf.INT_RATE, CF.CFLW_TYPE_CODE, CF.CFLW_TYPE_GRP_CODE 
, CF.CFLW_STATUS_CODE 
from edw.extv_t_dim_trd TRD 
, edw.extv_t_trade_leg LEG 
, edw.extv_fact_cash_flow CF 
where TRD.SRCE_TRD_ID = CF.SRCE_TRD_ID 
    and TRD.TRD_ID = CF.TRD_ID 
    and CF.SRCE_TRD_ID = LEG.SRCE_TRD_ID 
    and CF.TRD_LEG_ID = LEG.TRD_LEG_ID 
    and TRD.SRCE_SYS_CODE = 'WSS' 
    and cf.SRCE_SYS_CODE = 'WSS' 
    and leg.SRCE_SYS_CODE = 'WSS' 
    AND TRD.TRD_STATUS_CODE <> 'CANCELED' 
    AND LEG.INSTM_TYPE_CODE NOT IN ('FX', 'FX-OPTION') 
    AND TRD.TRD_ACTV_TO_DATE >= to_date('04/01/2013','mm/dd/yyyy') 
    and TRd.TECH_TRD_FLAG = 'N' 
    and cf.cflw_status_code = 'FINAL' 
    and TRD.ACTV_FLAG = 'Y' 
    and LEG.ACTV_FLAG = 'Y' 
    and cf.actv_flag ='Y' 

위의 쿼리를 사용하면 Surrogate_key에 고유 한 값을 추가 할 수 있었지만 고유 한 값을 찾을 수 있었지만 쿼리에 대한 전반적인 기록은 3 백만 개였습니다. 별개의 250 만 개가 있지만 비 고유 한 가치를 중지하십시오. 5 백만. 그러면 어떻게 할 수 있습니까?고유하지 않은 레코드를 찾는 방법은 무엇입니까?

그리고 우리가 Surrogate_key를 구성 할 때 사용하는 테이블에 기본 키가 하나 더없는 경우가 하나 더 있습니다. 그것도 일부 중복 값을 포함하고있었습니다. 이러한 문제를 피하기 위해 사용해야 할 경우 어떤 방법이 필요한지 미래.

감사합니다, Srini

내가 어쩌면이 스크립트가 도움이 될 것입니다 모든 문제를 알아 보았하지만 surrogate_key의 중복을 검색 할 가정하지 않는
+0

제대로 코드를 포맷하십시오 쿼리를 감소 핵심 문제. 고맙습니다. –

+0

오라클 사람들은 조인을 수행하기 위해 ANSI SQL을 배워야합니다. 관절이 거기에서 끝나면 where 절이 엉망입니다. –

+0

@ srini 무엇을 찾으십니까? Surrogate_key의 중복? 왜냐하면, 아마도 내가 너를 도울 수 있기 때문이야. –

답변

0

:

CREATE TABLE TEST(
    Surrogate_key VARCHAR2(100)); 

INSERT INTO TEST VALUES('AAAA'); 
INSERT INTO TEST VALUES('ACAA'); 
INSERT INTO TEST VALUES('AAAA'); 
INSERT INTO TEST VALUES('AAAB'); 
INSERT INTO TEST VALUES('AAAA'); 
INSERT INTO TEST VALUES('ACAA'); 

/*HERE THE QUERY*/ 
SELECT T.Surrogate_key, COUNT(1) AS MATCHES 
FROM TEST T 
GROUP BY T.Surrogate_key 
HAVING COUNT(1) > 1 

당신이 시도 할 수 이 here.

(부터 2013 년 편집) 를 쿼리 작업, 다음 (이 당신이 반복 행을 찾을 수 있습니다)이 시도한다고 가정 :

SELECT T.Surrogate_key, COUNT(1) AS MATCHES 
FROM (
    SELECT TRD.PKG_ID||'_'||TRD_CONT_NBR||'_'||LEG.TRD_LEG_NBR||'_'|| TRD.TRD_ID||'_'||CF.CURR_CODE||'_'||cf.cflw_date||'_'||CF.CFLW_TYPE_CODE 
    ||'_'||CF.CFLW_STATUS_CODE as Surrogate_key 
    from edw.extv_t_dim_trd TRD 
    , edw.extv_t_trade_leg LEG 
    , edw.extv_fact_cash_flow CF 
    where TRD.SRCE_TRD_ID = CF.SRCE_TRD_ID 
     and TRD.TRD_ID = CF.TRD_ID 
     and CF.SRCE_TRD_ID = LEG.SRCE_TRD_ID 
     and CF.TRD_LEG_ID = LEG.TRD_LEG_ID 
     and TRD.SRCE_SYS_CODE = 'WSS' 
     and cf.SRCE_SYS_CODE = 'WSS' 
     and leg.SRCE_SYS_CODE = 'WSS' 
     AND TRD.TRD_STATUS_CODE <> 'CANCELED' 
     AND LEG.INSTM_TYPE_CODE NOT IN ('FX', 'FX-OPTION') 
     AND TRD.TRD_ACTV_TO_DATE >= to_date('04/01/2013','mm/dd/yyyy') 
     and TRd.TECH_TRD_FLAG = 'N' 
     and cf.cflw_status_code = 'FINAL' 
     and TRD.ACTV_FLAG = 'Y' 
     and LEG.ACTV_FLAG = 'Y' 
     and cf.actv_flag ='Y' 
) T 
GROUP BY T.Surrogate_key 
HAVING COUNT(1) > 1 
+0

테이블을 만들 수 없습니다. 나는 ETL 테스팅을 시도하고있다. –

+0

@SriniVasan 그럼 테이블을 만들 수 없다면 어쩌면 유용하다고 게시 된 새로운 쿼리를 시도해 보라. –

+0

@SriniVasan이 게시물을 유용하다고 표시하는 것을 잊지 마십시오. 감사!. –

관련 문제