码迷,mamicode.com
首页 > 数据库 > 详细

oracle的行转列和列转行

时间:2016-06-20 10:03:55      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

1.行转列:

一、最初的数据:

技术分享

转换之后的数据:

技术分享

二、转换的语句:

--统计各职位的人员在各部门的分布人数:
SELECT T.JOB, SUM(DECODE(T.JOB, ‘CLERK‘, 1, NULL)) AS COUNT1
, SUM(DECODE(T.JOB, ‘SALESMAN‘, 1, NULL)) AS COUNT2
, SUM(DECODE(T.JOB, ‘PRESIDENT‘, 1, NULL)) AS COUNT3
, SUM(DECODE(T.JOB, ‘MANAGER‘, 1, NULL)) AS COUNT4
, SUM(DECODE(T.JOB, ‘ANALYST‘, 1, NULL)) AS COUNT5
FROM EMP T
GROUP BY T.JOB;

这样写的结果是:

技术分享

虽然与需要的结果相差不远,但是还是不行

三、最后的写法:

--统计各职位的人员在各部门的分布人数:

SELECT T.JOB, (CASE WHEN T.JOB=‘CLERK‘ THEN SUM(DECODE(T.JOB, ‘CLERK‘, 1, NULL))
WHEN T.JOB=‘SALESMAN‘ THEN SUM(DECODE(T.JOB, ‘SALESMAN‘, 1, NULL))
WHEN T.JOB=‘PRESIDENT‘ THEN SUM(DECODE(T.JOB, ‘PRESIDENT‘, 1, NULL))
WHEN T.JOB=‘MANAGER‘ THEN SUM(DECODE(T.JOB, ‘MANAGER‘, 1, NULL))
ELSE SUM(DECODE(T.JOB, ‘ANALYST‘, 1, NULL)) END) AS NUM
FROM EMP T
GROUP BY T.JOB

得到的结果就是:

技术分享

总结:行转列主要使用的是group by和聚合函数(max,sum),decode函数来实现的,这是原始的写法。还有一种使用pivot的更简便的实现转换的方式。

 

oracle的行转列和列转行

标签:

原文地址:http://www.cnblogs.com/qadyyj/p/5599693.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!