MySQL case when使用
8727 ワード
プログラムの中でエラーコードと辞書は対応していないで、二次加工をして、case whenの使用を振り返って、直接SQLの中で処理します
case whenの2つの書き方
簡単な判断:
判断値の列をcaseの後、whenの後に値を書き、等しい場合then後の文を実行するには、複数のwhen判断文を書くことができ、elseを返した値を満たさず、endで終わるには、endの後に列名を指定することができます.
式の判断:
caseの先頭、whenの後に式を書き、式が真であればthenを実行した後の文を書き、複数のwhen判断式を書くことができ、いずれも満たさない場合はelse後の値を返し、endで終わり、end後にその列に列名を指定することができる.
case whenはselectの後に書くことができて、where文の中で書くことができて、テーブルを連合する時連合のon文の中で書くことができます
エラーコードを二次加工する例を以下に示す
転載先:https://www.cnblogs.com/zhaoshizi/p/11552286.html
case whenの2つの書き方
簡単な判断:
判断値の列をcaseの後、whenの後に値を書き、等しい場合then後の文を実行するには、複数のwhen判断文を書くことができ、elseを返した値を満たさず、endで終わるには、endの後に列名を指定することができます.
CASE [col_name]
WHEN [value1] THEN [result1]
WHEN [value1] THEN [result2]
....
ELSE [default]
END [new_col_name]
式の判断:
caseの先頭、whenの後に式を書き、式が真であればthenを実行した後の文を書き、複数のwhen判断式を書くことができ、いずれも満たさない場合はelse後の値を返し、endで終わり、end後にその列に列名を指定することができる.
CASE
WHEN [expr] THEN [result1]
WHEN [expr] THEN [result2]
....
ELSE [default]
END [new_col_name]
case whenはselectの後に書くことができて、where文の中で書くことができて、テーブルを連合する時連合のon文の中で書くことができます
エラーコードを二次加工する例を以下に示す
select a.khh,a.warning_type ,b.error_type,b.error_name,count(*)
from (
select khh,warning_type, error_code from t_client_response_info where log_date>='10838' and log_date<'10853'
) a
LEFT JOIN t_error_code b
on
a.warning_type = b.alarm_type and
(case
when SUBSTR(a.error_code, 1, 4) in ('0002','0005','0006','0007','0008','0009') then CONCAT(SUBSTR(a.error_code, 1, 4),'0000')
when SUBSTR(a.error_code, 1, 6) in ('000C01','000C02') then CONCAT(SUBSTR(a.error_code, 1, 6),'00')
when SUBSTR(a.error_code, 1, 3) ='066' and SUBSTR(a.error_code, 1, 6) != '06600' then CONCAT(SUBSTR(a.error_code, 1, 5),'000')
when SUBSTR(a.error_code, 1, 2) ='06' and SUBSTR(a.error_code, 1, 3) != '066' then CONCAT(SUBSTR(a.error_code, 1, 2),'00',SUBSTR(a.error_code, 5, 4))
else a.error_code
end) = b.error_code
group by
a.khh,a.warning_type,b.error_type,b.error_name;
転載先:https://www.cnblogs.com/zhaoshizi/p/11552286.html