博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle的行转列和列转行
阅读量:4654 次
发布时间:2019-06-09

本文共 1180 字,大约阅读时间需要 3 分钟。

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的更简便的实现转换的方式。

2.列转行

一、最初的数据:

最后的数据:

二、写法

  (1)采用union all的方式实现

--列转行,将学科变成行显示

SELECT ID,'语文' AS COURSE, 语文 AS SCORE FROM STUDENT
UNION ALL
SELECT ID,'数学' AS COURSE, 数学 AS SCORE FROM STUDENT
UNION ALL
SELECT ID,'英语' AS COURSE, 英语 AS SCORE FROM STUDENT
ORDER BY ID

  (2)暂无,可以使用存储过程实现

 

转载于:https://www.cnblogs.com/qadyyj/p/5599693.html

你可能感兴趣的文章
通俗的计算机网络通信的软文——转载知乎
查看>>
ESP8266乐鑫版本的(支持云端升级 (Boot 模式)烧写方法,(V1.5.4官方介绍如下)(BOOT模式)...
查看>>
stm32 cubemx hal dma uart参考例程,发送和接收
查看>>
linux编译esp8266
查看>>
freemodbus收藏学习网址
查看>>
ESP8266_04管脚控制与软件定时器
查看>>
LiteOS的内核——RTOS基本的特性
查看>>
tcpip入门的网络教程汇总
查看>>
modbus_百度经验
查看>>
keil中使用Astyle格式化你的代码的方法-keil4 keil5通用
查看>>
modbus-crc16——c语言
查看>>
ALIENTEK 战舰ENC28J60 LWIP和UIP补充例程(LWIP WEB有惊喜)
查看>>
计算机网络教程的好文章收录
查看>>
stm32之HAL串口中断的callback流程图
查看>>
printf格式输出
查看>>
Modbus通讯协议
查看>>
Modbus教程| Modbus协议,ASCII和RTU帧,Modbus工作
查看>>
Modbus协议深入讲解_NI
查看>>
stm32——modbus例程网址收藏
查看>>
vscode+TCC快捷编译c语言
查看>>