zoukankan      html  css  js  c++  java
  • sqlServer,oracle中case关键字的用法

    一直在使用SQL Server,现在学习Oracle时发现SQL Server和Oracle中case语句有点小小的差别,不过两种case写法是一样的。 在写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 
  • 相关阅读:
    ubuntu下解决无法解析或打开软件包列表或状态文件的问题
    linux 解除文件root权限限制
    查看linux设备信息的命令
    R系安装rpm包
    重启窗口管理器
    内存泄漏如何定位?
    双屏显示,HDMI可以正常显示,lvds不显示
    避免linux下log在/var/log/messages 中重复输出的办法
    debian编包成功后,想要修改的文件的内容没有变化
    linux terminal 显示不全 将log内容打印出来
  • 原文地址:https://www.cnblogs.com/wanyakun/p/3403261.html
Copyright © 2011-2022 走看看