MySQL case when 使用


程序里錯誤碼和字典對應不上,要做二次加工,回顧了一下case when的使用,直接在SQL里處理一下

case when的兩種寫法

簡單判斷:

要判斷值的列寫在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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM