zoukankan      html  css  js  c++  java
  • 表的转置 行转列: DECODE(Oracle) 和 CASE WHEN 的异同点

    异同点
    • 都可以对表行转列;
    • DECODE功能上和简单Case函数比较类似,不能像Case搜索函数一样,进行更复杂的判断
    • 在Case函数中,可以使用BETWEEN, LIKE, IS NULL, IN, EXISTS等等(也可以使用NOT IN和NOT EXISTS,但是这个时候要注意NULL的情况。)
    DECODE方法 (Oracle公司独家)

    decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)

    --该函数的含义如下:    
    IF    条件=值1 THEN RETURN(翻译值1)   
    ELSIF 条件=值2 THEN RETURN(翻译值2)  
        ......  
    ELSIF 条件=值n THEN RETURN(翻译值n)  
    ELSE  RETURN(缺省值)  
    END IF   
    --行转列
    SELECT name,  
           SUM(DECODE(Subject, '数学', Score, 0)) 数学,  
           SUM(DECODE(Subject, '语文', Score, 0)) 语文,  
           SUM(DECODE(Subject, '英语', Score, 0)) 英语  
    FROM Scores 
    GROUP BY name  
    
    CASE WHEN
    SELECT name,
    SUM( CASE WHEN Subject='数学' THEN Score ELSE 0 END) 数学,
    SUM( CASE WHEN Subject='语文' THEN Score ELSE 0 END) 语文,
    SUM( CASE WHEN Subject='英语' THEN Score ELSE 0 END) 英语
    FROM Scores group by name;
    

    Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略,Else部分的默认值是NULL

    Case具有两种格式,简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式

    在Case函数中,可以使用BETWEEN, LIKE, IS NULL, IN, EXISTS等等(也可以使用NOT IN和NOT EXISTS,但是这个时候要注意NULL的情况。)

    --简单Case函数
    CASE sex
    WHEN '1' THEN '男'
    WHEN '2' THEN '女'
    ELSE '其他' END
    
    --Case搜索函数 
    CASE 
    WHEN sex = '1' THEN '男' 
    WHEN sex = '2' THEN '女' 
    ELSE '其他' END  
    
    --根据条件有选择的UPDATE。
    UPDATE Scores  SET grade = 
    CASE WHEN score >= 85 THEN '优秀'
         WHEN score >= 70 AND score < 85  THEN '良好' 
         WHEN score >= 60 AND score < 70  THEN '及格'
    ELSE '不及格' END; 
    
    --在Case函数中使用聚合函数:COUNT, SUM, AVG, MAX, MIN
    SELECT  name, 
    CASE WHEN COUNT(*) = 1 THEN MAX(subject) 
    ELSE MAX(CASE WHEN major = 'Y'  THEN subject ELSE NULL END) 
    END AS major_subject
    FROM Scores  GROUP BY name; 
    
    Scores表结构和实现如下

    image
    image

  • 相关阅读:
    第三章函数
    基本数据类型
    gulp压缩js
    read/load
    jQuery的类数组对象结构
    立即调用表达式
    npm
    cocos2d.js
    图片上传后压缩 Thinkphp
    判断用户是否在微信中
  • 原文地址:https://www.cnblogs.com/Joyce-marmot/p/9931584.html
Copyright © 2011-2022 走看看