ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 行列转换

行列转换

原创 Linux操作系统 作者:ycpriscilla 时间:2011-11-16 11:13:25 0 删除 编辑

总牛人已经总结过了:
http://www.itpub.net/forum.php?mod=viewthread&tid=1017026&extra=&highlight=%D0%D0%C1%D0&page=1

今天自己动手简单操作一下,只学习原理和最简单的方法,不做深入研究,改天工作用到再深入。


一.行转列:把多行里的数据转换到列里去(多个短行转为一个长行)。(这个用的较多吧)
1.根据某列来分组
2.把某列的列值作为结果中的列名
3.根据2中的列名查出需要的结果

SQL> WITH t AS (
  2  SELECT '张三' NAME,'语文' SUBJECT, '80' SCROE FROM dual UNION ALL
  3  SELECT '张三' NAME,'英语' , '85'  FROM dual UNION ALL
  4  SELECT '张三' NAME,'英语' , '99'  FROM dual UNION ALL
  5  SELECT '张三' NAME,'数学' , '93'  FROM dual UNION ALL
  6  SELECT '李四' NAME,'语文' , '90'  FROM dual UNION ALL
  7  SELECT '李四' NAME,'英语' , '75'  FROM dual UNION ALL
  8  SELECT '李四' NAME,'数学' , '87'  FROM dual )
  9  SELECT * FROM t;
 
NAME SUBJECT SCROE
---- ------- -----
张三 语文    80
张三 英语    85
张三 英语    99
张三 数学    93
李四 语文    90
李四 英语    75
李四 数学    87

现在要得出张三、李四各科的最高成绩:
NAME 语法 英语 数学
---- ---- ---- ----
李四 90   75   87
张三 80   99   93

根据名字分组,把subject列的值转换为列名,求分数。
 9  SELECT NAME,
 10         MAX(DECODE(SUBJECT, '语文', SCROE)) 语法,
 11         MAX(DECODE(SUBJECT, '英语', SCROE)) 英语,
 12         MAX(DECODE(SUBJECT, '数学', SCROE)) 数学
 13    FROM T
 14  GROUP BY NAME;
 
NAME 语法 英语 数学
---- ---- ---- ----
李四 90   75   87
张三 80   99   93

现在想知道哪个科目报了多少人怎么办?即
 9  SELECT subject ,wmsys.wm_concat(DISTINCT NAME) 报名学生 FROM t GROUP BY subject;
 
SUBJECT 报名学生
------- --------------------------------------------------------------------------------
数学    李四,张三
英语    李四,张三
语文    李四,张三

 
二。列转行:把一行的数据根据列名转换为多行数据(一个长行转为多个短行)。(这个较少吧)
1.根据某一列分组
2.把其余每列的值都放到别一个字段中去,结果一共有 (N-1)原表行数。
SQL> WITH t AS(
  2  SELECT '李四' NAME, '90' 语文,'75' 英语,'87' 数学 FROM DUAL UNION ALL
  3  SELECT '张三' NAME, '80' 语文,'99' 英语,'93' 数学 FROM DUAL )
  4  SELECT * FROM t;
 
NAME 语文 英语 数学
---- ---- ---- ----
李四 90   75   87
张三 80   99   93

  4  SELECT  NAME, '语文' SUBJECT, 语文 FROM T UNION ALL
  5  SELECT  NAME, '英语' SUBJECT, 英语 FROM T UNION ALL
  6  SELECT  NAME, '数学' SUBJECT, 数学 FROM T
  7  ORDER BY NAME
  8  ;
 
NAME SUBJECT 语文
---- ------- ----
李四 语文    90
李四 英语    75
李四 数学    87
张三 英语    99
张三 数学    93
张三 语文    80

 


 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24478467/viewspace-711036/,如需转载,请注明出处,否则将追究法律责任。

下一篇: SAP HANA数据库
请登录后发表评论 登录
全部评论

注册时间:2011-08-18

  • 博文量
    36
  • 访问量
    106722