一直在使用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 isMainDutyfrom 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, TitleFROM titlesGROUP 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, TitleORDER 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