X

【SQL SERVER】 CASE文の使い方

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 文の備忘録でした。

itsysgroup:
Related Post