CASE 文を使って結果を分岐させて取得する SQL 文の備忘録です。
CASE 式によって、SQL 文で if-then-else の機能を実装できます。
CASE文は、一連の条件を評価して、考えられる結果式のうちの 1 つを返します。
CASE 式には 2 つの形式があります。
単純 CASE 式では、1 つの式を一連の単純式と比較して結果を決定します。
検索 CASE 式では、一連のブール式を評価して結果を判定します。
どちらの形式も、ELSE 引数 (省略可) をサポートしています。
CASE は、有効な式を使用できる任意のステートメントや句で使用できます。 たとえば、SELECT、UPDATE、DELETE、SET などのステートメントや、select_list、IN、WHERE、ORDER BY、HAVING などの句で使用できます。
簡単な例を記述します。
declare @tbl1 table(a_cd char(9), b_kbn char(1), c_kbn int) insert into @tbl1 (a_cd,b_kbn,c_kbn) values ('000000001','1',0) insert into @tbl1 (a_cd,b_kbn,c_kbn) values ('000000010','1',1) insert into @tbl1 (a_cd,b_kbn,c_kbn) values ('000000020','2',1) insert into @tbl1 (a_cd,b_kbn,c_kbn) values ('000000030','2',1) select * from @tbl1 --例1 単純 CASE 式 select a_cd, case b_kbn when '1' then 'OK' when '2' then 'NG' else '-' end as 判定 from @tbl1 --例2 検索 CASE 式 select a_cd, case when b_kbn = '1' OR c_kbn = '0' then 'OK1' when b_kbn = '1' OR c_kbn = '1' then 'OK2' when b_kbn = '2' OR c_kbn = '0' then 'NG1' when b_kbn = '2' OR c_kbn = '1' then 'NG2' else '-' end as 判定 from @tbl1
ちなみに、合致する条件がなく、 else の指定もなければ、 CASE 式は null を返します。
以上、 CASE 文を使って結果を分岐させて取得する SQL 文の備忘録でした。