--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默认空排序第一个,所以这种数据手动放在最后。