CASE 句の例

internet_inc という名前の次のような Virtual DataPort ビューについて考えてみます。

id | summary

ttime

taxid

1

Error in ADSL router

2005-06-29 19:19:41.0

B78596011

2

Incident in ADSL router

2005-06-29 19:19:41.0

B78596012

3

Install additional line

2005-06-29 19:19:41.0

B78596013

4

Bandwidth increase

2005-06-29 19:19:41.0

B78596014

例 1

SELECT id
    , summary
    , CASE
        WHEN LEN(summary) > 22
            THEN summary
        ELSE id
        END
FROM internet_inc

id

summary

case

1

Error in ADSL router

1

2

Incident in ADSL router

Incident in ADSL router

3

Install additional line

Install additional line

4

Bandwidth increase

4

例 2

SELECT id
    , CASE
        WHEN id = 1 THEN true
        ELSE id
    END AS is_first
FROM internet_inc
Error executing sentence: Incorrect select sentence: CASE argument
IINC_ID is not compatible with the rest of values.

WHEN 句の 結果 の型は ELSE 句の結果の型と互換性がありません。最初の型は boolean 型で、その他は long 型です。

例 3

SELECT id
    ,CASE
        WHEN id = 1
            THEN 'first'
        ELSE id
        END AS is_first
FROM internet_inc

id

is_first

1

first

2

2

3

3

4

4

注釈

WHEN 句または ELSE 句の 結果 の型が同じでない場合、有効な結果を取得するために結果は自動的に変換されます。この場合、 結果String に変換されます。

例 4

CASE 句はクエリの WHERE 部分で使用することもできます。

SELECT *
FROM internet_inc
WHERE true = (
        CASE id
            WHEN 1
                THEN true
            ELSE false
            END
        )

id

summary

ttime

taxid

1

Error in ADSL router

2005-06-29 19:19:41.0

B78596011

例 5

以下の 2 つのクエリは同等で、同じ結果が取得されますが、異なる方法で CASE を使用しています。

SELECT id
    , CASE id
        WHEN CASE id
                WHEN 1
                    THEN 1
                ELSE 2
                END
            THEN 'first'
        WHEN 2
            THEN 'second'
        ELSE 'other'
        END
FROM internet_inc;
SELECT id
    , CASE id
        WHEN CASE
                WHEN id = 1
                    THEN 1
                ELSE 2
                END
            THEN 'first'
        WHEN 2
            THEN 'second'
        ELSE 'other'
        END
FROM internet_inc;

id

case

1

first

2

first

3

other

4

other

注釈

CASE は、最初に true に評価された WHEN 句の結果を返します。この例では、最初の WHEN 条件も 2 番目の条件も true ですが、最初の結果が返されます。