--case語句的種類:
1.簡單case語句
文法:
case exp when comexp then returnvalue
...
when comexp then returnvalue
else returnvalue
end
case到end之間相當于一個具體的值,可以做運算,取别名,嵌套case 等等。
隻要把case到end當作一個運算結果的表達式就可以了。
舉例:
select cust_last_name,
case credit_limit when 100 then 'low'
when 5000 then 'high'
else 'medium'
end
from customers;
--注意事項:
1.case 表達式傳回的是一個确定的value,若前面的都不比對,則傳回else中的項(相當于 =,是以也不能比對null).
2.簡單case 中的表達式,when 後面的表達式類型應該全部保持一緻.
3.所有的then 後面的return_value類型要保持一緻.
4.對于簡單case 表達式,也就是case 表達式 when…那麼when null 總是取不到。也就是case 後面的表達式如果值為null,不會與when null 比對,隻會與else比對.
--case中嵌套子查詢
Case語句中可以使用子查詢,但是必須傳回一行,不可以是多行.
如:
select case (select count(*) as s1 from t1 where a = 1)
when (select count(*) as s2 from t1, t2 where t1.a = t2.a and t2.a = 1) then '相等'
else '不相等'
end
from dual;
***CASE之應用實踐:
SELECT JCXX.ID,
JCXX.FXSJ,
JCXX.ZT,
jcxx.xgsj
FROM T_JCXX JCXX
JOIN T_ZDRYBK_XQ ZDRY
ON JCXX.ID = ZDRY.JCXX_ID
JOIN T_JBXX_ZDRYK RYK
ON RYK.RYJBXX_ID = ZDRY.ZDRY_ID
AND RYK.SCBS = '0'
WHERE JCXX.SCBS = '0'
AND JCXX.SFXXYW = '0'
order by JCXX.ZT,
case jcxx.zt
when '0' then
JCXX.fxsj
else
jcxx.xgsj
end desc nulls last
,jcxx.id desc nulls last ;
介紹:T_JCXX 基礎表 T_ZDRYBK_XQ 重點人員詳情表 T_JBXX_ZDRYK 人員基本資訊 關系1:1
需求:根據zt升序,當zt為0時,根據fxsj倒序,當zt為1時,根據xgsj倒序。
id desc nulls last 一般防止髒資料導緻前面排序的字段都是為空的。
nulls last 防止髒資料都為空的時候,一般oarcle預設空排序第一個,是以這種資料手動放在最後。