0
SELECT DISTINCT
     A.currency_code AS currency_code,
     NVL (B.Acct_ID, A.Acct_ID) SECND_Acct_ID,
     NVL (B.Type_currency_code, A.Type_currency_code) SECND_Type_currency_code,
     NVL (B.Seg_Type, A.Seg_Type) SECND_Seg_Type,
     NVL (B.B_Func_Code, A.B_Func_Code) SECND_B_Func_Code,
     A.Acct_ID AS PRIM_Acct_ID,
     A.Type_currency_code AS PRIM_Type_currency_code,
     A.Seg_Type AS PRIM_Seg_Type,
     A.B_Func_Code AS PRIM_B_FuncCode
FROM    (SELECT Acct_ID,
           Type_currency_code,
           Seg_Type,
           B_Func_Code,
           B_ID,
           B_NBR,
           currency_code
      FROM BAU
     WHERE P_A_IND IN ('Y')) A
LEFT OUTER JOIN
   (SELECT Acct_ID,
           Type_currency_code,
           Seg_Type,
           B_Func_Code,
           B_ID,
           B_NBR,
           currency_code
      FROM BAU
     WHERE P_A_IND IN ('N')) B
ON     A.B_NBR = B.B_NBR
   AND A.B_ID = B.B_ID
   AND A.currency_code = B.currency_code
  • 目的は、同じテーブルの異なるプライマリおよびセカンダリ ( PRIM_Acct_ID、PRIM_Type_currency_code、PRIM_Seg_Type、PRIM_B_FuncCode) 列を識別することです。
  • Y が p_a_ind (一次指標) のものは一次、それ以外は二次です。
  • b_nbr、b_id、および currency_code は、自己結合を行った主キーです。

このクエリを記述するより良い方法があるかどうかを知りたい/見たいです。

4

1 に答える 1

1

条件をサブクエリからwhereまたはon句にそれぞれ移動することで、クエリを明確にすることができます。

SELECT  ...
FROM    BAU A
LEFT JOIN
        BAU B
ON      B.P_A_IND IN ('N')
        AND A.B_NBR = B.B_NBR
        AND A.B_ID = B.B_ID
        AND A.currency_code = B.currency_code
WHERE   A.P_A_IND IN ('Y')
于 2012-09-04T17:04:06.687 に答える