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 
posted @ 2011-06-30 18:03  坤坤同学  阅读(1079)  评论(0编辑  收藏  举报