DECODEファンクションは、ある式を1つ以上の他の式と比較し、基準の式が検索式と等しい場合に呼応する結果式を返します。一致する式がまったくない場合にはデフォルトの式(デフォルトが指定されている場合)またはNA
(デフォルトが指定されていない場合)を返すファンクションです。
パラメータ
(比較の基準とする)検索される式。このファンクションでは、比較の前に、exprを1番目のsearch値のデータ型に自動変換します。
(比較する対象の)検索する式。このファンクションでは、比較の前に、各search値を1番目のsearch値のデータ型に自動変換します。
expressionがsearchと等しいときに返される式。
expressionがsearchと等しくないときに返される式。
使用上の注意
値の評価の順序
search、resultおよびdefaultの値は、式から導出されます。このファンクションでは、いずれかの値をexprと比較する前にまずすべてのsearch値を評価するのではなく、各search値を、それぞれexprと比較する前にのみ評価します。したがって、先行するsearchがexprと等しい場合、以後のsearchは評価されません。
例
例7-64 IDフィールドのデコード
アナリティック・ワークスペースに次のオブジェクトが含まれているとします。計算式inventory_location
では、DECODEファンクションを使用して、warehouse_id
のINTEGER
値に対応するテキスト値を特定しています。
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