客户需求是咨询如何用SQL结合decode函数实现条件判断,比如当某一列数值大于500,对应类型“大于500”;当某一列数值小于500,对应类型“小于500”。
实际decode函数无法实现这个功能,实现要用到case when,为此我构造一个简单的示例来直观演示:create table test302(id number, name varchar2(20));insert into test302 values (499, 'aaa');insert into test302 values (500, 'bbb');insert into test302 values (501, 'ccc');commit;
测试包含case when的SQL:
select u.id,u.name, (case when u.id>500 then '大于500' when u.id<500 then '小于500' else '等于500' end )typefrom test302 u;
得到结果如下:
SQL> select u.id,u.name, 2 (case 3 when u.id>500 then '大于500' 4 when u.id<500 then '小于500' 5 else '等于500' 6 end 7 )type 8 from test302 u; ID NAME TYPE---------- -------------------- --------- 499 aaa 小于500 500 bbb 等于500 501 ccc 大于500
满足客户用SQL实现某列值条件判断的需求,我们可以看到这个例子非常简单,但这也是大多数运维dba的短板--SQL相关知识欠缺,还是要学习积累的。