zoukankan      html  css  js  c++  java
  • Sql case when用法

    说明,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 )      
        
    女职员的条件倒是符合了,男职员就无法输入了。  
     
     
  • 相关阅读:
    数据窗口的缓冲区
    RowsMove()
    update
    defparameter defconstant
    1+ 1
    原则
    incf decf
    eql equal
    上司找谈话
    判断回文的函数palindrome?
  • 原文地址:https://www.cnblogs.com/youxin/p/4040228.html
Copyright © 2011-2022 走看看