<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="topic_template.xsl"?>
<topic>
<category>Statement</category>
<classification>SQL-DDL</classification>
<ref_entry>CASE</ref_entry>
<creator date="2004/03/15 04:02:12">Shue Miula</creator>
<modified />
<definition>ケース表現の結果によって、列の値が割り当てられます。</definition>
<structure>
<sql term=";">
 <syn>CASE</syn><syn>ON</syn>
 <combine>
  <a><var>table</var></a><a><var>col</var></a>
 </combine>
 <syn>WHEN</syn><a><var>condition </var></a><syn>THEN</syn><a><var>result value</var></a><br />
 <option>
   <syn>WHEN</syn><a><var>condition </var></a><syn>THEN</syn><a><var>result value</var></a><br />
   <option><syn>ELSE</syn><a><var>result value</var></a></option>
 </option>
</sql>
</structure>
<arguments>
<argument>
<name><var>table</var>.<var>col</var></name>
<description>CASE句の条件判定の対象となるテーブルとカラムの名前です。</description>
</argument>
<argument>
<name><var>condition</var></name>
<description><var>table</var>.<var>col</var> の値に対する判定条件です。</description>
</argument>
<argument>
<name><var>result value</var></name>
<description><var>table</var>.<var>col</var> が <var>condition</var> のときに <var>table</var>.<var>col</var> の値として、CASE句が返す戻り値です。<syn>ELSE</syn>が使用された場合の <var>result value</var> は全ての <syn>WHEN</syn> の <var>condition</var> 判定が偽となった場合に返される値となります。</description>
</argument>
</arguments>
<description>
CASE句はSQL文中であるフィールドの値によって、他の値を返したい場合に、クライアントプログラムやデータベース正規化以外の方法によって問題を解決できる簡単な方法です。また、ELSEを指定することによって、CASE句が表す値は単にデータベースの正規化だけでは実現が困難な問題も解決できます。一般的にCASE句はSELECT句のカラム指定の代わりに記述されます。これはFirebired1.5で導入された新しい機能のひとつであり、Firebirdのそれより前のバージョンでは使用できません。
</description>
<examples>
<example>
<description>EXAMPLE テーブルの TEST カラムの整数値によって TEST カラムが特定の文字列を返すようにします。</description>
<samplecode>
SELECT
 EXAMPLE.THE_NUMBER,
 EXAMPLE.THE_NAME,
 CASE EXAMPLE.TEST
   WHEN 0 THEN 'エラー'
   WHEN 1 THEN '通常'
   WHEN 2 THEN '拡張'
   WHEN 3 THEN '特殊'
   ELSE '未定義の値です'
 END
 FROM EXAMPLE
 WHERE EXAMPLE.THE_NUMBER> 999;
</samplecode>
</example>
</examples>
<see_also>
<keyword name="sql_begin_declare_section">BEGIN DECLARE SECTION</keyword>
<keyword name="sql_create_table">CREATE TABLE</keyword>
<keyword name="sql_end_declare_section">END DECLARE SECTION</keyword>
</see_also>
</topic>
