日期:2014-05-16  浏览次数:20416 次

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?
???