zoukankan      html  css  js  c++  java
  • Oracle中行转列,列转行pivot的用法

    测试数据准备

    --建表
    --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

    查询结果如下图:

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

  • 相关阅读:
    第九周
    第七周.
    第六周.
    第二次作业
    第九周作业
    第八周作业
    第七周作业
    第六周作业
    第五周作业
    统计一行文本的单词个数
  • 原文地址:https://www.cnblogs.com/zmoumou/p/11103701.html
Copyright © 2011-2022 走看看