具有动态列和动态数据的SQL查询

时间:2019-10-04 05:12:36

标签: sql oracle

我的查询。

INSERT INTO TARGET_TABLE (SELECT DATA FROM TABLE_DATA WHERE TYPE = 'HEADER') VALUES
(SELECT DATA FROM TABLE_DATA WHERE TYPE = 'ITEMS')

在此查询中,我尝试将数据插入TARGET_TABLE。 TABLE_DATA将具有以下格式的数据

SELECT DATA FROM TABLE_DATA WHERE TYPE = 'HEADER'
Result COUNTRY,ID,NAME

SELECT DATA FROM TABLE_DATA WHERE TYPE = 'ITEMS'
Result 'IN','123','xyz' 

所以我期待以下

INSERT INTO TARGET_TABLE (COUNTRY,ID,NAME) VALUES ('IN','123','xyz')

2 个答案:

答案 0 :(得分:1)

select case是您所需要的

INSERT INTO TARGET_TABLE 
(SELECT case when type='HEADER' then COL1 else 'aa' END
     ,case when type='HEADER' then COL2 else 'bb' END
     ,case when type='HEADER' then COL3 else 'cc' END
     ,case when type='HEADER' then COL4 else 'dd' END
FROM TABLE_DATA )

答案 1 :(得分:1)

您需要使用如下所示的动态查询:

BEGIN
EXECUTE IMMEDIATE 
  'INSERT INTO TARGET_TABLE ( ' 
  || SELECT DATA FROM TABLE_DATA WHERE TYPE = 'HEADER' 
  || ') VALUES ('
  || SELECT DATA FROM TABLE_DATA WHERE TYPE = 'ITEMS' 
  || ')';
END;
/

干杯!