2013-01-17 4 views
0

세 개의 테이블을 생성하는 SQL 문을 작성해야합니다. 하나의 SQL 문이 세 개의 테이블을 생성합니다.

나는 내가 세 개의 테이블을 생성 할 수 있습니다 개별적으로 실행하는 경우 개별 SQL 코드가 있습니다 표 1

select t.TRADE_ID, t.TRADE_VERSION, t.TRADE_SOURCE_SYSTEM, tl.LINK_PARENT_ID, 
tl.LINK_PARENT_VERSION, tc.CHARGE_AMOUNT, tc.CHARGE_SCOPE FROM EQ_MO_TRADE (NOLOCK) t, EQ_MO_TRADE_CHARGE (NOLOCK) tc, EQ_MO_TRADE_LINKAGE (NOLOCK) tl 
WHERE t.TRADE_OID = tl.TRADE_OID 
AND t.TRADE_OID = tc.TRADE_OID 
AND tl.LINK_TYPE = 'Allocation' 
AND tc.CHARGE_NAME = 'Commission' 
AND tc.CHARGE_AMOUNT != 0.0 

표 2

select aD.ALLOCATION_ID, aD.ALLOCATION_VERSION, aD.ALLOCATION_SOURCE_SYSTEM, 
    al.LINK_PARENT_ID, al.LINK_PARENT_VERSION, ac.CHARGE_AMOUNT FROM EQ_MO_ALLOCATION_DETAIL aD, EQ_MO_ALLOCATION_DETAIL_CHARGE ac, EQ_MO_ALLOCATION_INSTR_LINKAGE al, EQ_MO_ALLOCATION_INSTR aI 
    WHERE aD.ALLOCATION_DETAIL_OID = ac.ALLOCATION_DETAIL_OID 
    AND aD.ALLOCATION_INSTR_ID = aI.ALLOCATION_INSTR_ID 
    AND aI.ALLOCATION_INSTR_OID = al.ALLOCATION_INSTR_OID 
    AND ac.CHARGE_NAME = 'Commission' 
    AND ac.CHARGE_AMOUNT != 0.0 
    AND ac.CHARGE_AMOUNT != -1.0 
    and aD.ALLOCATION_ID in 

(select tl.LINK_PARENT_ID FROM EQ_MO_TRADE t, EQ_MO_TRADE_CHARGE tc, EQ_MO_TRADE_LINKAGE tl 
    where t.TRADE_OID = tl.TRADE_OID 
    AND t.TRADE_OID = tc.TRADE_OID 
    AND tl.LINK_TYPE = 'Allocation' 
    AND tc.CHARGE_NAME = 'Commission' 
    AND tc.CHARGE_AMOUNT != 0.0) 

그래서 테이블 2 열에서의 입력의립니다 표 3은 표 2의 열에서 입력 한 것입니다.

코드 중복을 제거하고 쉽게 p 다음 표에 열 값을 입력하십시오.

이러한 SQL을 하나로 롤업 할 수 있습니까?

편집 : Netezza의 DB는 DBVisualizer

+0

두 개의보기를 만드시겠습니까? – deerchao

+0

** 태그 **에 추가 - 사용하는 데이터베이스 엔진과 같은 것들을 설명 할 곳 :-) –

+0

@deerchao, 나는 SQL에 매우 익숙하다. 한 변수가 다른 변수와 비슷하다. – Will

답변

0

당신이 할 수 있는지를 질의! 어떤 열이 필요한지 정확히 알 수 있지만 다음 사항이 효과가 있다고 생각합니다. 아, 묵시적 조인 구문 (쉼표로 분리 된 FROM 절)을 사용하는 것보다 항상 조인을 명시 적으로 한정하는 것이 더 좋습니다.

WITH Charged_Allocated_Commission (trade_id, trade_version, trade_source_system, link_parent_id, link_parent_version, charge_amount, charge_scope) AS 
    SELECT t.trade_id, t.trade_version, t.trade_source_system, 
      tl.link_parent_id, tl.link_parent_version, 
      tc.charge_amount, tc.charge_scope 
    FROM Eq_Mo_Trade t 
    JOIN Eq_Mo_Trade_Linkage tl 
     ON tl.trade_oid = t.trade_oid 
      AND tl.link_type = 'Allocation' 
    JOIN Eq_Mo_Trade_Charge tc 
     ON tc.trade_oid = t.trade_oid 
      AND tc.charge_name = 'Commission' 
      AND tc.charge_amount != 0.0) 
SELECT cac.trade_id, cac.trade_version, cac.trade_source_system, 
     cac.link_parent_id, cac.link_parent_version, 
     cac.charge_amount, cac.charge_scope, 
     ad.allocation_version, ad.allocation_source_system, 
     -- I'm fairly certain these are duplicates of cac.trade_version/_source_system... 
     al.link_parent_id, al.link_parent_version, 
     ac.charge_amount 
FROM Charged_Allocated_Commission cac 
JOIN Eq_Mo_Allocation_Detail ad 
    ON ad.allocation_id = cac.link_parent_id 
JOIN Eq_Mo_Allocation_Detail_Charge ac 
    ON ac.allocation_detail_oid = ad.allocation_detail_oid 
    AND ac.charge_name = 'Commission' 
    AND ac.charge_amount NOT IN (0.0, -1.0) 
JOIN Eq_Mo_Allocation_Instr ai 
    ON ai.allocation_instr_id = ad.allocation_instr_id 
JOIN Eq_Mo_Allocation_Instr_Linkage al 
    ON al.allocation_instr_oid = ai.allocation_instr_oid 

레이아웃에 대해 조금도 알지 못하면 그 밖의 무엇이 제거 될 수 있는지 알기가 어렵습니다.
노트의 몇 : 플로트/실제 유형의

  • 내가 Eq_Mo_Trade_Charge.charge_amountEq_Mo_Allocation_Detail_Charge.charge_amount 소수점/돈 유형은 있으리라 믿고있어, 및 하지 일종. 그들이 부유물 인 경우, 조건이 작동하지 않을뿐만 아니라 정확한 금액도 저장하지 않습니다.
  • 접두사가 모두 Eq_Mo_... 인 '잡음'이 조금 있습니다. Netezza는 테이블을 대신 배치 할 수있는 스키마를 지원하지 않습니까?
관련 문제