タイトルの通り。
SQL Serverでは、
ChatGPTWHERE
句内でCASE
文を使用する際に、THEN
句内で比較演算子を直接使用することはできません。比較演算子を使用するためには、CASE
文の結果を一時的な列に格納し、その列をWHERE
句で使用する必要があります。
SQLのWHERE句内で条件分岐したいときがある。
通常下のように
SELECT * FROM TABLE_TEST
WHERE
USER_ID = ?
AND AGE >
CASE WHEN GENDER = 'M' THEN 30 ELSE 25 END
のような感じ書くことが多いだろう。
しかし、
GENDER = ‘M’のとき、さらに条件を絞りたいときもある。
そのときは CASEの中でCASEを使ったり、
SELECT * FROM TABLE_TEST
WHERE
USER_ID = ?
AND AGE >
CASE WHEN ISNULL(GENDER,'') <> '' THEN
CASE
WHEN GENDER = 'M' THEN 30 ELSE 25
END
ELSE 1
END
SELECT * FROM TABLE_TEST
WHERE
USER_ID = ?
AND
(
CASE WHEN ISNULL(GENDER,'') <> '' THEN
CASE
WHEN AGE > 30 THEN 1 ELSE 0
END
ELSE 1
END) = 1
CASE文が1つの条件式となるように、AGE>30が当てはまるときは1として、成立し、ヒットする。当てはまらないときはWHERE句内が0=1となるので、ヒットしない。