MySQL case when使用

8727 ワード

プログラムの中でエラーコードと辞書は対応していないで、二次加工をして、case whenの使用を振り返って、直接SQLの中で処理します
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