说明,sql中的if和else 是不能在select 语句中使用的。只能用来控制sql程序的流程。只能用case when。

CREATE TABLE USER
(
NAME VARCHAR(20) NOT NULL,---姓名
SEX INTEGER,---性别(1、男 2、女)
BIRTHDAY DATE---生日
);

CASE使用场合1:把user表导出生成一个文件,要求性别为男或女,而不是1和2,怎么办?我们可以用如下的语句处理:

SELECT    
    NAME,   
    CASE SEX   
        WHEN 1 THEN '男'  
        ELSE '女'  
    END AS SEX,   
    BIRTHDAY   
FROM USER;  
 CASE使用场合2:假设user目前没有值,然后你往user导入了一批数据,但是很不幸,错把男设置成为2,而把女设置成为1,现在要求你变换过来,怎么办?

UPDATE USER SET SEX=   
(   
CASE SEX   
WHEN 1 THEN 2   
WHEN 2 THEN 1   
ELSE SEX   
END   
);

有时候,when中不是常值,需要判断,可以这样:

select name,
 case 
        when birthday<'1981' then 'old'
        when birthday>'1988' then 'yong'
        else 'ok'

END YORN
from lee;

我们 来判断工资的等级,并统计每一等级的人数。SQL代码如下;     
    
SELECT      
    
        CASE WHEN salary <= 500 THEN '1'      
    
             WHEN salary > 500 AND salary <= 600  THEN '2'      
    
             WHEN salary > 600 AND salary <= 800  THEN '3'      
    
             WHEN salary > 800 AND salary <= 1000 THEN '4'      
    
        ELSE NULL END salary_class,      
    
        COUNT(*)      
    
FROM    Table_A      
    
GROUP BY      
    
        CASE WHEN salary <= 500 THEN '1'      
    
             WHEN salary > 500 AND salary <= 600  THEN '2'      
    
             WHEN salary > 600 AND salary <= 800  THEN '3'      
    
             WHEN salary > 800 AND salary <= 1000 THEN '4'      
    
        ELSE NULL END;      
    
在Check中使用Case函数在很多情况下都是非常不错的解决方法。可能有很多人根本就不用Check,那么我建议你在看过下面的例子之后也尝试一下在SQL中使用Check。     
    
下面我们来举个例子     
    
公司A,这个公司有个规定,女职员的工资必须高于块。如果用Check和Case来表现的话,如下所示     
    
CONSTRAINT check_salary CHECK      
    
           ( CASE WHEN sex = '2'      
    
                  THEN CASE WHEN salary > 1000      
    
                        THEN 1 ELSE 0 END      
    
                  ELSE 1 END = 1 )      
    
如果单纯使用Check,如下所示     
    
CONSTRAINT check_salary CHECK      
    
           ( sex = '2' AND salary > 1000 )      
    
女职员的条件倒是符合了,男职员就无法输入了。  
 
 

Sql case when用法的更多相关文章

  1. sql case when 用法

    sql语言中有没有类似C语言中的switch case的语句?? 没有,用case   when   来代替就行了.            例如,下面的语句显示中文年月         select  ...

  2. Oracle CASE WHEN 用法介绍

    1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索 ...

  3. Oracle CASE WHEN 用法介绍[Z]

    Oracle CASE WHEN 用法介绍 1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ...

  4. oracle case when 用法

    原文:http://www.cnblogs.com/eshizhan/archive/2012/04/06/2435493.html 1. CASE WHEN 表达式有两种形式 --简单Case函数 ...

  5. 问题:oracle case when;结果:Oracle CASE WHEN 用法介绍

    Oracle CASE WHEN 用法介绍 1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ...

  6. SQL语句---nvl 用法

    SQL语句---nvl 用法   一NVL函数是一个空值转换函数 NVL(表达式1,表达式2) 如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值. 该函数的目的是把一个空值(nul ...

  7. SQL 语句日期用法及函数

    SQL 语句日期用法及函数 --DAY().MONTH().YEAR()——返回指定日期的天数.月数.年数:select day(cl_s_time) as '日' from class  --返回天 ...

  8. SQL 中ROLLUP 用法

    SQL 中ROLLUP 用法 ROLLUP 运算符生成的结果集类似于 CUBE 运算符生成的结果集. 下面是 CUBE 和 ROLLUP 之间的具体区别: CUBE 生成的结果集显示了所选列中值的所有 ...

  9. 标准SQL语言的用法

    原文链接:http://www.ifyao.com/2015/05/18/%E6%A0%87%E5%87%86%E7%9A%84sql%E8%AF%AD%E8%A8%80%E4%BD%BF%E7%94 ...

随机推荐

  1. 再论 ASP.NET 中获取客户端IP地址

    说到IP获取无非是我们常见的以下几种方式,但是具体获取的值具体区别在哪?网上不乏相关文章,说的也是很详细,但是真正使用起来,还有很多不太对的地方.IP在不同系统中,应用相当广泛,常见的日志记录.广告分 ...

  2. An overview of the Spring MVC request flow

    The Spring MVC request flow in short: When we enter a URL in the browser, the request comes to the d ...

  3. 以前用过Extjs技术的开发人员在学习Extjs4时需要注意的问题

            以前学习过Extjs的同学,在学习Extjs4的时候需要注意几个关键改变: 1.Extjs4的新的类系统. 2.Extjs4中MVC思路 3.Extjs4中的新的命名规范(结合新的MV ...

  4. 【BZOJ】【4011】【HNOI2015】落忆枫音

    拓扑排序+DP 题解:http://blog.csdn.net/PoPoQQQ/article/details/45194103 http://www.cnblogs.com/mmlz/p/44487 ...

  5. 在eclipse中配置maven

    http://pansanday.blog.163.com/blog/static/381662802012727103454743/ 从eclipse 3.6开始,eclipse有一个marketp ...

  6. 客户端发包 GS端接收

    客户端发包,GS接收 bool GameServer::ProcessLoop(packet& rPkt)//GS线程做的 { if(false == m_spDataLayer->Re ...

  7. yii无限极分类

    /** * 获取菜单Tree * * @return multitype: */ public function getMenuAllList() { $resArr = $this->getT ...

  8. Codeforces Round #216 (Div. 2)解题报告

    又范低级错误! 只做了两题!一道还被HACK了,囧! A:看了很久!应该是到语文题: 代码:#include<iostream> #include<];    ,m2=;    ;i ...

  9. JSP 页面打印

    <HTML><HEAD><TITLE>javascript打印-打印页面设置-打印预览代码</TITLE> <META http-equiv=Co ...

  10. HDU5002 Tree(LCT)

    今天做了一道LCT模板题之后忽然间好像记起来LCT的模板怎么用了,于是就把上次网络赛的一道LCT补一下.典型的删边,加边操作,还有路径加和路径set为一个数.维护的是路径第二大以及它有多少个,后来想想 ...