oracle中sql的case语句运用--根据不同条件去排序!

本文详细介绍了SQL中Case语句的语法和使用方法,包括简单Case语句的结构和注意事项,以及如何在Case语句中嵌套子查询。通过具体示例,展示了Case语句在实际查询中的应用,特别关注了排序和条件判断的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT枫斗者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值