日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle pivoting insert 用法简介

發布時間:2025/3/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle pivoting insert 用法简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本的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 用法简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。