度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 1253|回复: 5
打印 上一主题 下一主题

[分享] Oracle行转列函数(unpivot )使用宝典

[复制链接]

348

主题

3572

帖子

9327

积分

论坛元老

Rank: 8Rank: 8

积分
9327
跳转到指定楼层
楼主
发表于 2020-6-21 19:37:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
unpivot 行转列顾名思义就是将多列转换成1列中去
案例:现在有一个水果表,记录了4个季度的销售数量,现在要将每种水果的每个季度的销售情况用多行数据展示。

创建表和数据

  1. <span style="background-color: white;">create table Fruit(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int);

  2. insert into Fruit values(1,'苹果',1000,2000,3300,5000);
  3. insert into Fruit values(2,'橘子',3000,3000,3200,1500);
  4. insert into Fruit values(3,'香蕉',2500,3500,2200,2500);
  5. insert into Fruit values(4,'葡萄',1500,2500,1200,3500);
  6. select * from Fruit</span>
复制代码


列转行查询

  1. <span style="background-color: white;">select id , name, jidu, xiaoshou from Fruit unpivot (xiaoshou for jidu in (q1, q2, q3, q4) )
  2. </span>
复制代码


注意: unpivot没有聚合函数,xiaoshou、jidu字段也是临时的变量


同样不使用unpivot也可以实现同样的效果,只是sql语句会很长,而且执行速度效率也没有前者高

  1. <span style="background-color: white;">select id, name ,'Q1' jidu, (select q1 from fruit where id=f.id) xiaoshou from Fruit f
  2. union
  3. select id, name ,'Q2' jidu, (select q2 from fruit where id=f.id) xiaoshou from Fruit f
  4. union
  5. select id, name ,'Q3' jidu, (select q3 from fruit where id=f.id) xiaoshou from Fruit f
  6. union
  7. select id, name ,'Q4' jidu, (select q4 from fruit where id=f.id) xiaoshou from Fruit f
  8. </span>
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
沙发
发表于 2020-6-21 20:10:26 | 只看该作者
前几天遇到过
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
板凳
发表于 2020-6-21 20:10:53 | 只看该作者
回复 支持 反对

使用道具 举报

348

主题

3572

帖子

9327

积分

论坛元老

Rank: 8Rank: 8

积分
9327
地板
 楼主| 发表于 2020-6-22 23:11:27 | 只看该作者

学会了吗?感谢我吧,请吃牛肉面
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复 支持 反对

使用道具 举报

348

主题

3572

帖子

9327

积分

论坛元老

Rank: 8Rank: 8

积分
9327
5#
 楼主| 发表于 2020-6-22 23:13:02 | 只看该作者
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
6#
发表于 2020-6-23 22:48:58 | 只看该作者
万望 发表于 2016-8-22 23:11
学会了吗?感谢我吧,请吃牛肉面

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-24 09:56 , Processed in 0.128076 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表