加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlServer,oracle中case关键字的用法

发布时间:2020-12-12 15:20:28 所属栏目:MsSql教程 来源:网络整理
导读:???? 在写SQL时,有时要根据已有的列值构造新的列值,这时就要用到的SQL中的case关键字。如下所示查询负责人信息表(T_MS_CustomerCrmInfoDutyPerson)中的是否是主要负责人(isMainDuty)字段,但是这个字段的值是以枚举的方式存储的,存储0表示是否,1表示

????在写SQL时,有时要根据已有的列值构造新的列值,这时就要用到的SQL中的case关键字。如下所示查询负责人信息表(T_MS_CustomerCrmInfoDutyPerson)中的是否是主要负责人(isMainDuty)字段,但是这个字段的值是以枚举的方式存储的,存储0表示是否,1表示是,否则表示未判断。这时直接查询出的值不是自己需要的值,可以用case关键字重新构建列值

select case
????????? when cfdutystate=0 then '否'
????????? when cfdutystate=1 then '是'
????????? else null
?????? end as isMainDuty
from T_MS_CustomerCrmInfoDutyPerson

注意点:

1,以case开头,以end结尾
2,when后跟条件分支中,then后为显示结果
3,else为除此之外的默认情况,类似于java的switch case的default,可以不加
4,Oracle中end后跟别名或者sqlserver中语法如下:

isMainDuty =case
???????????????????????? when cfdutystate=0 then '否'
???????????????????????? when cfdutystate=1 then '是'
???????????????????????? else null
????????????????????end

除此之外,case也可以用到group by语句中以根据需要实现灵活的分组操作,如下所示的列子:

SELECT ??? CASE ??????? WHEN price IS NULL THEN 'Unpriced' ??????? WHEN price < 10 THEN 'Bargain' ??????? WHEN price BETWEEN 10 and 20 THEN 'Average' ??????? ELSE 'Gift to impress relatives' ??? END AS Range,??? Title FROM titles GROUP BY ??? CASE ??????? WHEN price IS NULL THEN 'Unpriced' ??????? WHEN price < 10 THEN 'Bargain' ??????? WHEN price BETWEEN 10 and 20 THEN 'Average' ??????? ELSE 'Gift to impress relatives' ??? END,??? Title ORDER BY ??? CASE ??????? WHEN price IS NULL THEN 'Unpriced' ??????? WHEN price < 10 THEN 'Bargain' ??????? WHEN price BETWEEN 10 and 20 THEN 'Average' ??????? ELSE 'Gift to impress relatives' ??? END,??? Title

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读