Oracle中行转列,列转行pivot的用法

Wesley13
• 阅读 727

测试数据准备

--建表
--drop table SalesList;
create table SalesList(
    keHu                varchar2(20),   --客户
    shangPin            varchar2(20),   --商品名称
    salesNum            number(8)       --销售数量
);

--插入数据
declare
  --谈几个客户
  cursor lr_kh is 
  select regexp_substr('张三、李四、王五、赵六','[^、]+',1, level) keHu from dual
   connect by level <= 4;
  --进点货
  cursor lr_sp is 
  select regexp_substr('上衣、裤子、袜子、帽子','[^、]+',1, level) shangPin from dual
   connect by level <= 4;
begin
  --循环插入
  for v_kh in lr_kh loop
     for v_sp in lr_sp loop
        insert into SalesList
        select v_kh.keHu, v_sp.shangPin, floor(dbms_random.value(10,50)) from dual;
     end loop;
  end loop;
  commit;
end;

pivot进行转换的sql如下:

--行转列
select *
  from SalesList pivot(
    max(salesNum) for shangPin in (    --shangPin 即要转成列的字段
        '上衣' as 上衣,                 --max(salesNum) 此处必须为聚合函数,
        '裤子' as 裤子,                 --in () 对要转成列的每一个值指定一个列名
        '袜子' as 袜子,
        '帽子' as 帽子
    )
  )
 where 1 = 1;                          --这里可以写查询条件,没有可以直接不要where

查询结果如下图:

Oracle中行转列,列转行pivot的用法

希望这个简单的例子能够对大家有帮助~~~~~~~~

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
PPDB:今晚老齐直播
【今晚老齐直播】今晚(本周三晚)20:0021:00小白开始“用”飞桨(https://www.oschina.net/action/visit/ad?id1185)由PPDE(飞桨(https://www.oschina.net/action/visit/ad?id1185)开发者专家计划)成员老齐,为深度学习小白指点迷津。
Easter79 Easter79
3年前
springboot+mybatis+达梦数据库
准备工作:首先,安装达梦6数据库。安装完之后如下建表!(https://oscimg.oschina.net/oscnet/56a34f632f1f61e6c38a1027a560fb69ead.png)然后,很重要的一点(写法一定要这样写,否则无限报错)达梦数据库查表方式:select \ from  "库名"
表的纵横表变换
​在我们平时使用数据库时,经常会发现有的表列数过多,为了提高效率,我们经常对要查询的表来纵横表变换。一.行转列1.PIVOT函数PIVOT(任意聚合函数 FOR 列名 IN(类型))    其中,【聚合函数】聚合的字段,是需要转化为列值的字段;【列名】是需要转化为列标识的字段,【类型】即是需要的结果展示,【类型】中可以指定别名; IN中还可以
Wesley13 Wesley13
3年前
MYSQL函数group_concat的使用
今天对一批数据要迁移转换,查了下,有group\_concat这个函数简单实现字段的列转行设置,过程记录如下一.测试数据准备mysqlusetest;Databasechangedmysqlselectfromt_kenyon;|id|
Wesley13 Wesley13
3年前
Mysql 分区表
DROPTABLEIFEXISTS\frank\_test\;CREATETABLE\frank\_test\(\id\bigint(20)NOTNULLAUTO\_INCREMENTCOMMENT'主键id',\gid\bigint(20)DEFAULT'0'COMMENT'基础表id'
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Stella981 Stella981
3年前
OS X Mavericks 10.9.5 (13F34) bt下载地址
OSXMavericks10.9.5(13F34),源http://bitsnoop.com/osxmavericks109513f34dmgq68447977.html磁力链magnet:?xturn:btih:4c887e73cd37228d8dc0746315501edc289acc51&dnOS%20X%2
Wesley13 Wesley13
3年前
ES6之路第三篇:字符串的扩展
字符的Unicode表示法1"\u{20BB7}"2//"𠮷"34"\u{41}\u{42}\u{43}"5//"ABC"67lethello123;8hell\u{6F}//123910'\u{
Wesley13 Wesley13
3年前
Oracle 行列转换函数pivot、unpivot的使用(二)
一、行转列pivot关键函数pivot,其用法如下pivot(聚合函数for列名in(类型))select\fromtable\_namepivot(max(column\_name)                           行转列后的列的值value,聚合函数是必须要有的