• 表的转置 行转列: 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

  • 相关阅读:
    hdu 1712(分组背包)
    hdu 3033(好题,分组背包)
    阶乘除法(很久之前的一道题,感觉挺好的,遂记录之)
    hdu 1559(最大子矩阵)
    hdu 1080(LCS变形)
    POJ 3458 Colour Sequence
    HUST 1599 Multiple
    HDU 3903 Trigonometric Function
    HUST 1605 Gene recombination
    UVA 11551 Experienced Endeavour
  • 原文地址:https://www.cnblogs.com/niudaxianren/p/10018715.html
Copyright © 2020-2023  润新知