• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > 编程与数据库 > mysql教程 >

case when用法例子 SQL中的CASE WHEN使用方法(3)

来源: www.dedecms8.com 编辑:织梦吧 时间:2014-06-23点击:
    
                      population ELSE 0 END)   --女性人口     
    
FROM  Table_A      
    
GROUP BY country;      
    
这样我们使用Select,完成对二维表的输出形式,充分显示了Case函数的强大。     
    
三,在Check中使用Case函数。     
    
在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 )      
    
女职员的条件倒是符合了,男职员就无法输入了。     
    
四,根据条件有选择的UPDATE。     
    
例,有如下更新条件     
    
工资以上的职员,工资减少%      
    
工资在到之间的职员,工资增加%      
    
很容易考虑的是选择执行两次UPDATE语句,如下所示     
    
--条件     
    
UPDATE Personnel     
    
SET salary = salary * 0.9     
    
WHERE salary >= 5000;     
    
--条件     
    
UPDATE Personnel     
    
SET salary = salary * 1.15     
    
WHERE salary >= 2000 AND salary < 4600;     
    
但是事情没有想象得那么简单,假设有个人工资块。首先,按照条件,工资减少%,变成工资。接下来运行第二个SQL时候,因为这个人的工资是在到的范围之内,需增加%,最后这个人的工资结果是,不但没有减少,反而增加了。如果要是反过来执行,那么工资的人相反会变成减少工资。暂且不管这个规章是多么荒诞,如果想要一个SQL 语句实现这个功能的话,我们需要用到Case函数。代码如下:      
    
UPDATE Personnel     
    
SET salary = CASE WHEN salary >= 5000     
    
            THEN salary * 0.9     
    
WHEN salary >= 2000 AND salary < 4600     
    
THEN salary * 1.15     
    
ELSE salary END;     
    
这里要注意一点,最后一行的ELSE salary是必需的,要是没有这行,不符合这两个条件的人的工资将会被写成NUll,那可就大事不妙了。在Case函数中Else部分的默认值是NULL,这点是需要注意的地方。     
    
这种方法还可以在很多地方使用,比如说变更主键这种累活。     
    
一般情况下,要想把两条数据的Primary key,a和b交换,需要经过临时存储,拷贝,读回数据的三个过程,要是使用Case函数的话,一切都变得简单多了。     
    
p_key col_1 col_2      
    
a 1 张三     
    
b 2 李四     
    
标签: sql case when

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1170734538@qq.com ,  QQ