Oracle 行转列 Case When,Decode两种方式

成绩表(CHENGJI)如下:

    XINGMING KEMU CHENGJI
  1 张三 语文 89.00
  2 张三 数学 98.00
  3 张三 英语 88.00
  4 李四 语文 90.00
  5 李四 数学 89.00
  6 李四 英语 60.00
  7 王五 数学 66.00
  8 王五 英语 99.00


方法一、DECODE

SELECT CJ.XINGMING,
       SUM(DECODE(CJ.KEMU, '语文', CJ.CHENGJI, 0)) 语文,
       SUM(DECODE(CJ.KEMU, '数学', CJ.CHENGJI, 0)) 数学,
       SUM(DECODE(CJ.KEMU, '英语', CJ.CHENGJI, 0)) 英语
  FROM CHENGJI CJ
 GROUP BY CJ.XINGMING
    XINGMING 语文 数学 英语
  1 张三 89 98 88
  2 王五 0 66 99
  3 李四 90 89 60


方法二、CASE WHEN

SELECT CJ.XINGMING,
       SUM( CASE WHEN CJ.KEMU = '语文' THEN CJ.CHENGJI ELSE 0 END ) 语文,
       SUM( CASE WHEN CJ.KEMU = '数学' THEN CJ.CHENGJI ELSE 0 END ) 数学,
       SUM( CASE WHEN CJ.KEMU = '英语' THEN CJ.CHENGJI ELSE 0 END ) 英语
  FROM CHENGJI CJ
 GROUP BY CJ.XINGMING 
    XINGMING 语文 数学 英语
  1 张三 89 98 88
  2 王五 0 66 99
  3 李四 90 89 60

猜你喜欢

转载自oma1989.iteye.com/blog/1922546