ヘッダーをスキップ
Oracle® OLAP DMLリファレンス
11gリリース2 (11.2)
B61346-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

DECODE

DECODEファンクションは、ある式を1つ以上の他の式と比較し、基準の式が検索式と等しい場合に呼応する結果式を返します。一致する式がまったくない場合にはデフォルトの式(デフォルトが指定されている場合)またはNA(デフォルトが指定されていない場合)を返すファンクションです。

戻り値

最初のresult引数のデータ型

構文

DECODE (expr , search, result [, search , result]... [, default])

パラメータ

expr

(比較の基準とする)検索される式。このファンクションでは、比較の前に、exprを1番目のsearch値のデータ型に自動変換します。

search

(比較する対象の)検索する式。このファンクションでは、比較の前に、各search値を1番目のsearch値のデータ型に自動変換します。

result

expressionsearchと等しいときに返される式。

default

expressionsearchと等しくないときに返される式。

使用上の注意

値の評価の順序

searchresultおよびdefaultの値は、式から導出されます。このファンクションでは、いずれかの値をexprと比較する前にまずすべてのsearch値を評価するのではなく、各search値を、それぞれexprと比較する前にのみ評価します。したがって、先行するsearchexprと等しい場合、以後のsearchは評価されません。

例7-64 IDフィールドのデコード

アナリティック・ワークスペースに次のオブジェクトが含まれているとします。計算式inventory_locationでは、DECODEファンクションを使用して、warehouse_idINTEGER値に対応するテキスト値を特定しています。

DESCRIBE
DEFINE product_id DIMENSION TEXT
DEFINE warehouse_id DIMENSION INTEGER
DEFINE inventories VARIABLE DECIMAL <product_id warehouse_id>
DEFINE inventory_location FORMULA TEXT <warehouse_id>
EQ -
DECODE (warehouse_id, 1, 'Southlake', 2, 'San Francisco', 4, 'Seattle', -
'Non domestic')
 
REPORT inventories
                     ---------------INVENTORIES---------------
                     ---------------PRODUCT_ID----------------
WAREHOUSE_ID                 1770                 1775
-------------------- -------------------- --------------------
                   1                30.63                79.02
                   2                71.49                55.83
                   3                88.71                68.02
                   4                86.27                41.86
 
 
REPORT inventory_location
WAREHOUSE_ID          INVENTORY_LOCATION
-------------------- --------------------
                   1 Southlake
                   2 San Francisco
                   3 Non domestic
                   4 Seattle
 

次の各レポートにより、inventory_locationを使用すると、warehouse_idの実際の値ではなく、デコードされたwarehouse_idの値をレポートに表示できることがわかります。

LIMIT product_id to '1775'
 
REPORT DOWN warehouse_id inventories
                     ----INVENTORIES-----
                     -----PRODUCT_ID-----
WAREHOUSE_ID                 1775
-------------------- --------------------
                   1                79.02
                   2                55.83
                   3                68.02
                   4                41.86
 
REPORT DOWN inventory_location inventories
                     ----INVENTORIES-----
                     -----PRODUCT_ID-----
INVENTORY_LOCATION           1775
-------------------- --------------------
Southlake                           79.02
San Francisco                       55.83
Non domestic                        68.02
Seattle                             41.86

例7-65 BITANDを使用したDECODE

アナリティック・ワークスペースに、レポート済の値を持つ次のオブジェクトがあるとします。

DEFINE order_id DIMENSION TEXT
DEFINE customer_id DIMENSION TEXT
DEFINE order_customer COMPOSITE <order_id customer_id>
DEFINE order_status VARIABLE NUMBER(2) <order_customer<order_id customer_id>>
 
REPORT DOWN order_customer order_status
  ORDER_ID   CUSTOMER_ID  ORDER_STATUS
------------ ------------ ------------
2458         101                  0.00
2397         102                  1.00
2454         103                  1.00
2354         104                  0.00
2358         105                  2.00
2381         106                  3.00
2440         107                  3.00
2357         108                  5.00
2394         109                  5.00
2435         144                  6.00
2455         145                  7.00
2356         105                  5.00
2360         107                  4.00
 
 

order_statusの値は、最初の3ビットに注文に関する情報が格納され、その他のビットは常に0であるビットマップとして使用されるとします。

  • 最初のビットは、場所に関する情報に使用されます。

    0=郵便局(Post Office)。0、2、4、6の整数値に対応します。

    1=倉庫(Warehouse)。1、3、5、7の整数値に対応します。

  • 2番目のビットは、輸送方法に使用されます。

    0=航空便(Air)。0、1、4、5の整数値に対応します。

    1=地上便(Ground)。2、3、6、7の整数値に対応します。

  • 3番目のビットは、受領方法に使用されます。

    0=保証付き(Certified)。0、1、2、3の整数値に対応します。

    1=保険付き(Insured)。4、5、6、7の整数値に対応します。

次の計算式は、DECODEを使用してビット値をテキスト値に置き換えます。

DEFINE location FORMULA DECODE(BITAND(order_status, 1), 1, 'Warehouse', 'PostOffice')
DEFINE method FORMULA DECODE(BITAND(order_status, 2), 2, 'Ground', 'Air')
DEFINE receipt FORMULA DECODE(BITAND(order_status, 4), 4, 'Insured', 'Certified')

これにより、デコードされた値を表示するレポートを発行できます。

REPORT DOWN order_customer order_status location method receipt

  ORDER_ID   CUSTOMER_ID  ORDER_STATUS   LOCATION      METHOD      RECEIPT
------------ ------------ ------------ ------------ ------------ ------------
2458         101                  0.00 PostOffice   Air          Certified
2397         102                  1.00 Warehouse    Air          Certified
2454         103                  1.00 Warehouse    Air          Certified
2354         104                  0.00 PostOffice   Air          Certified
2358         105                  2.00 PostOffice   Ground       Certified
2381         106                  3.00 Warehouse    Ground       Certified
2440         107                  3.00 Warehouse    Ground       Certified
2357         108                  5.00 Warehouse    Air          Insured
2394         109                  5.00 Warehouse    Air          Insured
2435         144                  6.00 PostOffice   Ground       Insured
2455         145                  7.00 Warehouse    Ground       Insured
2356         105                  5.00 Warehouse    Air          Insured
2360         107                  4.00 PostOffice   Air          Insured