,我有以下表的更復雜的版本插入多行:移調和具有不同的價值
ID | FIRST | LAST | EMAIL
1 | John | Doe | [email protected]
1 | Mack | Johnson | [email protected]
1 | Steven | Michaels | [email protected]
2 | Sarah | Sampson | [email protected]
2 | Tom | Smith | [email protected]
2 | Jane | Rogers | [email protected]
3 | Bob | Johns | [email protected]
3 | Kim | Lane | [email protected]
3 | Ron | Swanson | [email protected]
,我想編寫一個查詢中插入該數據到另一個表看起來像這樣(的表已存在):
ID | first1 | last1 | email1 | first2 | last2 | email2 | first3 | last3 | email3
1 | John | Doe | [email protected] | Mack | Johnson | [email protected] | Steven | Michaels | [email protected]
2 | Sarah | Sampson | [email protected] | Tom | Smith | [email protected] | Jane | Rogers | [email protected]
3 | Bob | Johns | [email protected] | Kim | Lane | [email protected] | Ron | Swanson | [email protected]
我覺得這應該很容易,但概念正在逃避我。完成此操作的最佳實踐是什麼?
也許我還應該提到,我已經寫了一個函數,可以傳遞ID,索引號和列名以返回值(即getpersoninfo(2,'1','first')返回莎拉)。
select a_id,
FIRST1, LAST1, EMAIL1,
FIRST2, LAST2, EMAIL2,
FIRST3, LAST3, EMAIL3
from
(
select a_id, col||rn as new_col, value
from
(
select a_id, first_name, last_name, email,
cast(row_number() over(partition by a_id order by a_id) as varchar2(10)) rn
from dump_recs_2015
)
unpivot
(
value
for col in (first_name, last_name, email)
)
)
pivot
(
max(value)
for new_col in ('FIRST1' FIRST1, 'LAST1' LAST1, 'EMAIL1' EMAIL1,
'FIRST2' FIRST2, 'LAST2' LAST2, 'EMAIL2' EMAIL2,
'FIRST3' FIRST3, 'LAST3' LAST3, 'EMAIL3' EMAIL3)
);
甲骨文的什麼版本?你是否只有每個ID有3個條目? – Taryn 2013-03-20 20:36:24
11g。有些會有兩個,但最多3個 – sgd 2013-03-20 20:37:54