Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql oracle将1行多列插入多行一列_Sql_Oracle_Unpivot - Fatal编程技术网

Sql oracle将1行多列插入多行一列

Sql oracle将1行多列插入多行一列,sql,oracle,unpivot,Sql,Oracle,Unpivot,我有一个表t1,它包含以下内容:数百万行 ID ID_1 ID_2 ID_3 ID_4 --------------------------------- 1 10 11 12 13 2 14 15 16 17 3 18 19 20 21 我需要在另一个表t2中插入这些数据,如下所示: ID ID_X ------------ 1 10 1

我有一个表t1,它包含以下内容:数百万行

ID    ID_1    ID_2   ID_3   ID_4
---------------------------------
1      10      11     12     13
2      14      15     16     17
3      18      19     20     21
我需要在另一个表t2中插入这些数据,如下所示:

ID     ID_X
------------
1       10
1       11
1       12
1       13
2       14
2       15
2       16
2       17
3       18
3       19
3       20
3       21
我已经用循环和游标做了我需要做的事情,但是我需要用一个插入来做,以获得更好的性能

有什么想法吗

编辑:

感谢回复,我使用UNPIVOT实现了我需要的功能

现在我需要进一步向t2表添加一个增量列,如下所示:

ID     ID_X     ID_Y
----------------------
1       10       0
1       11      200
1       12      400
1       13      600
2       14       0
2       15      200
2       16      400
2       17      600
3       18       0
3       19      200
3       20      400
3       21      600
使用UNION,这是可以实现的。以下查询将起作用:

INSERT INTO Newtable (ID, ID_X) 
SELECT ID, ID_X FROM (
    SELECT ID, ID_1 AS ID_X FROM TableName UNION
    SELECT ID, ID_2 AS ID_X FROM TableName UNION
    SELECT ID, ID_3 AS ID_X FROM TableName UNION  
    SELECT ID, ID_4 AS ID_X FROM TableName
) A
ORDER BY ID, ID_X
使用UNPIVOT

Oracle安装程序:

插入语句:

输出:

dbfiddle

从测试中选择ID,ID\u X
ID_1中的值为'A',ID_2为'B',ID_3为'C',ID_4为'D'

你想要的是,假设你在11g或更高版本上,请不要在问题得到回答后再编辑额外的内容。相反,你应该问一个新问题来解决这个新问题。因为这篇文章是关于Oracle的,但是使用SQL Server。谢谢!这就是我需要的!你能检查我的文章的编辑吗?因为我需要在我的文章中添加新的专栏table@ghostman按ID分区上的200*行数按名称排序为ID y
CREATE TABLE t1 ( ID, ID_1, ID_2, ID_3, ID_4 ) AS
  SELECT 1, 10, 11, 12, 13 FROM DUAL UNION ALL
  SELECT 2, 14, 15, 16, 17 FROM DUAL UNION ALL
  SELECT 3, 18, 19, 20, 21 FROM DUAL;

CREATE TABLE t2 ( ID NUMBER, ID_X NUMBER );
INSERT INTO t2 (id, id_x )
  SELECT id, value
  FROM   t1
  UNPIVOT ( value FOR name IN ( ID_1, ID_2, ID_3, ID_4 ) );
SELECT * FROM t2;
ID | ID_X -: | ---: 1 | 10 1 | 11 1 | 12 1 | 13 2 | 14 2 | 15 2 | 16 2 | 17 3 | 18 3 | 19 3 | 20 3 | 21