[SQL]MS-AccessでCASE文
MS-OfficeのAccessで、SQL文にCASE文を使いたいシチュエーションがあったのですが「AccessにはCASE文がないので困ってしまいました」と言うお話です。
解っている人は解っている超しょぼいネタです。
やりたい事は、下記のようなTABLEで、「CLM2がNULLでなければCLM2の値を、NULLの場合はCLM1の値を返したい」ということです。
元テーブル【TBL_1】
| ID | CLM1 | CLM2 | NAME |
| 1 | a | A | NAME_A |
| 2 | b | (NULL) | NAME_B |
| 3 | c | C1 | NAME_C |
ほしい結果
| ID | CLMX | NAME |
| 1 | A | NAME_A |
| 2 | b | NAME_B |
| 3 | C1 | NAME_C |
普通にSQLを書くと下記のようになる(と、思います・・・)。
普通のSQL【CASE使用】
SELECT
A.ID,
(CASE WHEN A.CLM2 IS NOT NULL THEN A.CLM2 ELSE A.CLM1 END) CLMX,
A.NAME
FROM
TBL_1 AS A
;
普通のSQL【IsNULL使用】
SELECT
A.ID,
IsNULL(A.CLM2, A.CLM1) CLMX,
A.NAME
FROM
TBL_1 AS A
;
AccessではIsNULLを上記のような使い方出来ないしどうしようと思って、無理やりUNIONを使用して下記のように書いてみました。
AccessのSQL【苦肉の策UNION使用】
SELECT * FROM
(SELECT
A.ID, A.CLM2 CLMX, A.NAME
FROM
TBL_1 A
WHERE
A.CLM2 IS NOT NULL )
UNION ALL
SELECT * FROM
(SELECT
A.ID, A.CLM1 CLMX, A.NAME
FROM
TBL_1 A
WHERE
A.CLM2 IS NULL)
;
でも、何の事はないAccess用のif文のIIF関数を使用すれば簡単でした。
AccessのSQL【IIF使用】
SELECT
A.ID,
IIF(IsNULL(A.CLM2),A.CLM1,A.CLM2) CLMX,
A.NAME
FROM
TBL_1 AS A
;


