我有一个看起来像这样的表:
表格1
column1 column2 column3
1 2 3
a 6 9
b 8 7
Run Code Online (Sandbox Code Playgroud)
我需要以这种格式将此数据复制到另一个表:
表2
column_name value
column1 1
column1 a
column1 b
column2 2
column2 6
column2 8
column3 3
column3 9
column3 7
Run Code Online (Sandbox Code Playgroud)
有超过100个表,如table1,有数百万行.我需要在table2中复制它.
所以,我打算写一下:
INSERT INTO table2
(column_name, value)
SELECT 'column1', column1
FROM table1;
INSERT INTO table2
(column_name, value)
SELECT 'column2', column2
FROM table1;
INSERT INTO table2
(column_name, value)
SELECT 'column3', column3
FROM table1;
Run Code Online (Sandbox Code Playgroud)
我有80个这样的列.是否有一种有效的编写方式,在Oracle中复制数据时也能快速工作?
编辑:更改了示例数据集以包含不同类型的数据.如果我使用unpivot,它会给我:
ORA-01790:表达式必须与相应的表达式具有相同的数据类型
使用unpivot
select * from table1
unpivot
(
"values" for column_names in (column1,column2,column3))
Run Code Online (Sandbox Code Playgroud)
编辑:插入上面的语句以将数据填充到另一个中
create table table2
(
column_names varchar2(1),
"values" varchar2(1)
)
/
insert into table2
select * from table1
unpivot
(
"values" for column_names in (column1 as '1',column2 as '2',column3 as '3'))
Run Code Online (Sandbox Code Playgroud)
更新它将用1替换column1,用2等替换column2
select * from table1
unpivot
(
"values" for column_names in (column1 as '1',column2 as '2',column3 as '3'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |