本的sql 语句 和例子转自:

http://space.itpub.net/25724608/viewspace-695818

oracle 有一种insert 语句叫 pivoting insert.

直译就是旋转插入了.

下面会用个例子做个简单说明.

首先建表两张表  sales_source_data,    sales_info

建表sql:

sales_source_data:

create table sales_source_data (
employee_id number(6),
week_id number(2),
sales_mon number(8,2),
sales_tue number(8,2),
sales_wed number(8,2),
sales_thur number(8,2),
sales_fri number(8,2)
);

sales_info:

create table sales_info (
employee_id number(6),
week number(2),
sales number(8,2)
);

接着对表 sales_source_data 插入一行数据.

insert into sales_source_data values (176,6,2000,3000,4000,5000,6000);

好了, 现在的需求是把表 sales_source_data 的数据

EMPLOYEE_ID    WEEK_ID  SALES_MON  SALES_TUE  SALES_WED SALES_THUR  SALES_FRI
-----------   ---------- ---------- ---------- ---------- ---------- ----------
        176          6       2000       3000       4000       5000       6000

导入到 另一张表 sales_info中.

很明显,  由于sales_source_data 是具有7个字段的.      而sales_info只有3个字段.

普通同的insert 方法不能胜任.

而有一种Insert 语句能将 原本横向的数据

EMPLOYEE_ID    WEEK_ID  SALES_MON  SALES_TUE  SALES_WED SALES_THUR  SALES_FRI

变成竖向的

EMPLOYEE_ID    
WEEK_ID  

SALES_MON

EMPLOYEE_ID    
WEEK_ID  

SALES_TUE

EMPLOYEE_ID    
WEEK_ID  

SALES_WED

EMPLOYEE_ID    
WEEK_ID  

SALES_THUR

EMPLOYEE_ID    
WEEK_ID  

SALES_FRI

5条数据 插入到sale_info 表.

看起来就想把打横的数据旋转了45度 变成打竖的数据(列转行)

所以这种insert 语句叫做 旋转insert (pivoting insert)

sql语句如下:

insert all
into sales_info values(employee_id, week_id, sales_mon)
into sales_info values(employee_id, week_id, sales_tue)
into sales_info values(employee_id, week_id, sales_wed)
into sales_info values(employee_id, week_id, sales_thur)
into sales_info values(employee_id, week_id, sales_fri)
select employee_id, week_id, sales_mon, sales_tue, sales_wed, sales_thur,sales_fri
from sales_source_data;

见到 Insert all 这个关键字了吧, 没错,  可见pivoting insert 也是 mutitable insert 的一种.

关于 mutitable insert 有如下重点:

INSERT [ALL | FIRST]

WHEN condition THEN insert_into_clause values_clause
[WHEN condition THEN] [insert_into_clause values_clause]
......
[ELSE] [insert_into_clause values_clause] 
Subquery;

例子:

Insert All
when id>5 then into z_test1(id, name) values(id,name)
when id<>2 then into z_test2(id) values(id)
else into z_test3 values(name)
select id,name from z_test;

关键就是Insert 后面 All 和 insert 的区别

当使用FIRST关键字时,oracle会从上至下判断每一个条件,当遇到第一个满足时就执行后面的into语句,

同时中断判断的条件判断,在上面的例子中,如果ID=6,仅仅会在z_test1中插入一条数据

oracle pivoting insert 用法简介相关推荐

  1. Oracle rollup 关键字用法简介.

    1. 什么是Rollup 在PL/sql 中,  Rollup 这个关键字通常用于select 语句的 group by 后面. 在group by 后面使用rollup关键字,  select语句就 ...

  2. oracle插入数据语句实例,oracle Insert 用法总结

    总结下Oracle 中的Insert用法 1.标准Insert --单表单行插入 语法: INSERT INTO table [(column1,column2,...)] VALUE (value1 ...

  3. Oracle系列之add_months简介以及用法归纳教程

    Oracle系列之add_months简介以及用法归纳教程 最近遇到一个SQL统计,需要遇到获取某个日期n个月后的日期,比如统计入职时间超过2年的员工信息 如果不依靠Oracle函数,自己去写有点麻烦 ...

  4. Oracle SQL调优系列之no_unnest和unnest用法简介

    Oracle调优之no_unnest和unnest用法简介 本博客介绍Oracle SQL调优的一种常用也是很实用的方法,也即/*+no_unnest */和/*+ unnest*/,介绍Oracle ...

  5. oracle中的select into,Oracle中insert into select和select into的用法

    Oracle中insert into select和select into的用法 两张表进行数据的拷贝,最常用的拷贝语句是: insert into select 和select into from ...

  6. oracle insert into insert,总结下Oracle 中的Insert用法

    1.标准Insert --单表单行插入 语法: INSERT INTO table [(column1,column2,...)] VALUE (value1,value2,...) 例子: inse ...

  7. oracle数据库insert into,oracle中insert into用法 oracle中insert如何带条件添加数据?

    oracle insert into 脚本怎么写 INSE INTO BOOK(bookid,name,price) VALUES('100123','oracle ',54); 或者 INSE IN ...

  8. oracle中rollback用法,Oracle中SAVEPOINT和ROLLBACK用法

    savepoint是事务内部允许部分rollback的标志符.因为事务中对记录做了修改,我们可以在事务中创建savepoint来标识不同的点.如果遇到错误,就可以rollback到不同的点或直接回来事 ...

  9. oracle中call用法,Oracle数据库中 call 和 exec的区别

    Oracle数据库中 call 和 exec的区别 今天发现了一个小东西,觉得很有意思,查找了一些资料,跟大家分享一下: 在sqlplus中: 在第三方提供的工具(如:plsqldev) 总结: ex ...

最新文章

  1. 我的天,你工作5年了,连Java agent都不知道...
  2. 青少年python编程课_青少年之Python编程课程安排第一季
  3. 死锁的四个必要条件,及处理方法
  4. 国际会议“First Helicon Plasma Physics and Applications Worckshop”口头报告PPT
  5. VIM-多文件-多窗口
  6. 微信小程序android错误,app安卓端 跳转到微信小程序失败
  7. 解决:无法获取实体类com.xxx.xx.xx.xx.dto.XxxDTO对应的表名
  8. ubuntu常用软件
  9. 新代系统反向间隙参数_新代系统SYNTEC:调试参数
  10. c/c++文本单词查询
  11. 共享硬盘没有权限访问计算机,win7系统访问磁盘共享没有权限的解决方法
  12. 蚂蚁金服 Service Mesh 技术风险思考和实践
  13. 不要质疑读者,读者永远比作者聪明
  14. 【看论文】之《基于YIQ彩色模型的成熟番茄图像分割识别_王新忠》
  15. 【python】详解multiprocessing多进程-Pool进程池模块(二)
  16. 使用 kickstart 半自动化安装CentOS系统 利用PXE实现自动化安装centos系统
  17. Vue3.0----综合案例(第七章)
  18. python14 Prompting and Passing
  19. STM32开发实战:W25Q32JV SPI Flash详解
  20. MSP430 F5529 硬件SPI OLED 单片机 0.96英寸7针OLED SPI 6针OLED

热门文章

  1. CTF Re-Python z3库的使用
  2. Linux网络配置与命令
  3. optee对std smc的处理的详解
  4. Vue+ElemtUI中对el-dialog弹出框宽度调整方法
  5. pwn学习总结(三) —— 栈溢出经典题型整理
  6. MySQL常用运算符详解
  7. 1.9 Java 9增强的自动资源管理
  8. requests库之IP归属地查询
  9. 1.1 基础-取近似值
  10. 方框(HPU暑期第四次积分赛)