0

オラクルでは、以下のようにデコードステートメントを使用しています。セキュリティ上の理由から、コードにハードコードされた値を含めたくないので、新しいルックアップ テーブルを作成する予定です。

  Select CONCAT( Decode(A.COUNTRY_INITIAL,
                        'A','America',
                        'B','Brazil',
                        'F','FINLAND',
                        NULL),
                 Decode(A.ADD_VALUE,
                        'M','YES',
                        NULL))
  from  (
      Select SUBSTR(COUNTRY_BASE, -1,1) as COUNTRY_INITIAL,
             SUBSTR(IS_VALUED, -1,1) as ADD_VALUE
      from TBL1
  )A

Refernece Table
*******************
Clmn1   Clmn2   Clmn3
--------------------------
cntry1  A       America
cntry2  B       Brazil
cntry3  F       Finland
Value1  M       YES

これをデコードロジックに組み込む方法を教えてください。また、Oracle 関数でこの CODE SNIPPET を使用しています。

4

3 に答える 3

1

ルックアップ情報をテーブルに保存する場合は、DECODE. 2 つのテーブルを結合します。

SELECT ref.clmn3
  FROM tbl1 t1
       LEFT OUTER JOIN <<reference table>> ref
         ON( substr(t1.country_base, -1, 1) = ref.clmn2 )

あなたDECODEには があるので、 の一部の行が参照テーブルに一致する行を持たないことNULLを期待していると推測しているので、ではなく が必要だと推測しています。tbl1LEFT OUTER JOININNER JOIN

于 2013-09-13T05:09:23.677 に答える
0

値を格納するために別のテーブルを使用している場合は、デコード機能は必要ありません。2 つのテーブルを結合するだけです。

select a.country_base,
       a.is_valued,
       b.clmn3,
       c.clmn3
  from tbl1 a left outer join reference_table b
              on (substr(a.country_base, -1, 1) = b.clmn2
              and b.clmn1 like 'cntry%'  --extra clause needed if there are same country and value codes
              )
              left outer join reference_table c
              on (substr(a.is_valued, -1, 1) = c.clmn2
              and c.clmn1 like 'Value%'  --extra clause needed if there are same country and value codes
              );
于 2013-09-13T05:08:23.207 に答える
0

これらの詳細がテーブルにある場合は、単純に結合を使用して目的の出力を得ることができます。

select t1.COUNTRY_BASE,ref.Clmn3,ref1.Clmn3
frorm TBL1 t1
left outer join reftable ref
on SUBSTR(t1.COUNTRY_BASE, -1,1)=ref.Clmn2  
left outer join reftable ref1
on SUBSTR(t1.IS_VALUED, -1,1)=ref.Clmn2;
于 2013-09-13T05:15:03.383 に答える