Ads by Google

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--年--月--日 スポンサー広告 トラックバック:- コメント:-

[SQL]MS-AccessでCASE文

MS-OfficeのAccessで、SQL文にCASE文を使いたいシチュエーションがあったのですが「AccessにはCASE文がないので困ってしまいました」と言うお話です。
解っている人は解っている超しょぼいネタです。

やりたい事は、下記のようなTABLEで、「CLM2がNULLでなければCLM2の値を、NULLの場合はCLM1の値を返したい」ということです。

元テーブル【TBL_1】

IDCLM1CLM2NAME
1aANAME_A
2b(NULL)NAME_B
3cC1NAME_C

ほしい結果
IDCLMXNAME
1ANAME_A
2bNAME_B
3C1NAME_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
;

2007年10月26日 プログラム トラックバック:0 コメント:0

<< [その他]「ロケットまつり19」に行ってきました。 | うずまき の なんとなくでいいのかも?TOP | [お散歩]等々力渓谷に行ってきました。 >>












管理者にだけ公開する

| このページの上へ |