我们在编写SQL语句时,常常遇到希望SQL能够按条件执行的情况。这里的条件不是指Where子句中的条件,而是指让DB2根据条件执行SQL的语句块。大多数情况下我们可以使用case来实现。
(1):CASE
(2):CASE 表达式1
上面的WHEN可以重复多次,就像C中的SWITCH ..CASE的表达
eg1:处理被0除
SELECT
CASE
WHEN fileld1=0 THEN 0
ELSE fileld2/field1
END
FROM
eg2:字段值对应转换
SELECT ORDNO,CUSNAM,SHIPDATE,CASE
FROM FILE
eg3:获取月份的名字:上面的例子
SELECT ORDNO,CUSNO,
FROM FILE
例如,我们希望从员工表中查出员工的工资情况,如果小于20000,则标志为low,20000到50000间为middle,否则为high。一般大家会想到先取出工资数据然后在Java代码中做判断,但我们也可以在SQL中完成上述操作。如下例:
select empno, sex, salary,
case
when salary < 20000 then 'low'
when salary >=20000 and salary <50000 then 'middle'
else 'high'
end as salaryclass
from employee
类似的,如果想在SQL语句中把性别翻译成文字,也可以用case实现,注意这两条SQL语句使用了不同的case表达式写法:
select empno,
case sex
when 'M' then 'male'
when 'F' then 'female'
else 'invalid'
end,
salary
from employee
Case不但能够在Select子句中使用,在From子句和Where子句中同样可以使用。下面是在Where子句中使用的一个例子:
select empno, sex, age
from employee
where
case sex
when 'M' then 55
when 'F' then 50
end > age