注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

饥民2011

一直在搬砖

 
 
 

日志

 
 
 
 

oracle pivoting insert 用法简介  

2013-10-04 23:55:04|  分类: Oracle |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

本的sql 语句 和例子转自:

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



oracle 有一种insert 语句叫 pivoting insert.

直译就是旋转插入了.


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

首先建表两张表  sales_source_data,    sales_info


建表sql:

sales_source_data:

  1. create table sales_source_data (  
  2. employee_id number(6),  
  3. week_id number(2),  
  4. sales_mon number(8,2),  
  5. sales_tue number(8,2),  
  6. sales_wed number(8,2),  
  7. sales_thur number(8,2),  
  8. sales_fri number(8,2)  
  9. );  

sales_info:

  1. create table sales_info (  
  2. employee_id number(6),  
  3. week number(2),  
  4. sales number(8,2)  
  5. );  

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

  1. 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语句如下:

  1. insert all  
  2. into sales_info values(employee_id, week_id, sales_mon)  
  3. into sales_info values(employee_id, week_id, sales_tue)  
  4. into sales_info values(employee_id, week_id, sales_wed)  
  5. into sales_info values(employee_id, week_id, sales_thur)  
  6. into sales_info values(employee_id, week_id, sales_fri)  
  7. select employee_id, week_id, sales_mon, sales_tue,   
  8.                     sales_wed, sales_thur,sales_fri  
  9. 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;

例子:

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


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

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

      同时中断判断的条件判断,在上面的例子中,如果ID=6,仅仅会在z_test1中插入一条数据
  评论这张
 
阅读(173)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017