[oracle]SQL-插入使用列名称作为值

标签: sql Oracle
发布时间: 2017/4/15 0:02:39
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想做插入到表 2的基础选择从表 1,但我不能得到正确的语法。 从表 1 的列名称将驱动的值被插入到 PD_NO 列在表 2,在下面的示例所示。 任何人都能与这帮吗?

表 1:

         (1)     (2)     (3)     (4)     (5)     (6)
| SEQ | PD_01 | PD_02 | PD_03 | PD_04 | PD_05 | PD_06 |
|-----+-------+-------+-------+-------+-------+-------|
| 632 | 10000 |   0   |  500  |   0   | 20000 |   0   |

表 2:

| SEQ | PD_NO |  AMT  |
|-----+-------+-------|
| 632 |   1   | 10000 |
|-----+-------+-------|
| 632 |   3   |  500  |
|-----+-------+-------|
| 632 |   5   | 20000 |
|-----+-------+-------|

我知道是否我在工作的其他方向 (插入内容的表 1 到表 2),可以做类似于以下内容︰

INSERT INTO table1
SELECT 
      seq,
      SUM (CASE WHEN pd_no = 1 THEN amt ELSE 0 END) p01_amt,
      SUM (CASE WHEN pd_no = 2 THEN amt ELSE 0 END) p02_amt,
      SUM (CASE WHEN pd_no = 3 THEN amt ELSE 0 END) p03_amt,
      SUM (CASE WHEN pd_no = 4 THEN amt ELSE 0 END) p04_amt,
      SUM (CASE WHEN pd_no = 5 THEN amt ELSE 0 END) p05_amt,
      SUM (CASE WHEN pd_no = 6 THEN amt ELSE 0 END) p06_amt
FROM table2;

解决方法 1:

这是一个典型的问题,为其 Oracle 11 提供了逆透视子句为查询中使用︰

insert  into table2(seq, pd_no, amt)
select  seq, pd_no, amt
from    ( select  *
          from    table1
          unpivot (amt for pd_no in (pd_01 as 1, pd_02 as 2, pd_03 as 3, pd_04 as 4, pd_05 as 5, pd_06 as 6))
        );
赞助商