SQL Cookbook:一、检索记录(8)在SELECT语句中使用条件逻辑

问题

    在SELECT语句中对数值进行IF-ELSE操作。例如,要产生一个结果集,如果一个员工的工资小于等于$2000,就返回消息UNDERPAID,如果大于等于$4000,就返回消息OVERPAID,如果在两者之间,就返回OK。结果集应如下所示:

ENAME SAL STATUS
---------- ---------- ----------
SMITH 800 UNDERPAID
ALLEN 1600 UNDERPAID
WARD 1250 UNDERPAID
JONES 2975 OK
MARTIN 1250 UNDERPAID
BLAKE 2850 OK
CLARK 2450 OK
SCOTT 3000 OK
KING 5000 OVERPAID
TURNER 1500 UNDERPAID
ADAMS 1100 UNDERPAID
JAMES 950 UNDERPAID
FORD 3000 OK
MILLER 1300 UNDERPAID

解决方案

    使用CASE表达式直接在SELECT语句中执行条件逻辑。

select ename,sal,
    case when sal <= 2000 then 'UNDERPAID'
         when sal >= 4000 then 'OVERPAID'
         else 'OK'
    end as status
from emp

讨论

    CASE表达式可以针对返回值执行条件逻辑。可以给CASE表达式取别名,以返回更易读的结果集。在本解决方案中,给CASE表达式取的别名是STATUS。ELSE子句是可选的,如果没有使用ELSE,对于不满足判断条件的行,CASE表达式会返回NULL。

版权说明:作者:张颖希PocketZ's Blog
出处:http://www.cnblogs.com/PocketZ
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

本文翻译内容取自网络,纯粹是练习英文水平,如有雷同,纯属意外!有不妥之处,欢迎拍砖!

posted @ 2010-04-19 21:23  pocketz  阅读(413)  评论(1编辑  收藏  举报