oracle pivoting insert 用法简介
本的sql 語句 和例子轉自:
http://space.itpub.net/25724608/viewspace-695818
oracle 有一種insert 語句叫 pivoting insert.
直譯就是旋轉插入了.
下面會用個例子做個簡單說明.
首先建表兩張表? sales_source_data,??? sales_info
建表sql:
sales_source_data:
sales_info:
接著對表 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 用法简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle 同义词(synonym)
- 下一篇: linux 下用ecipse 作用ora