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 ですが、最初の結果が返されます。