动态列名映射到另一个表以复制数据

时间:2018-09-21 04:56:18

标签: sql oracle

来源表包含最近2年的数据,例如:

column name: aug_16, sep_16 ... oct_17 ... jul_18, aug_18

列名每月更改一次-添加一列,删除一列。

例如,“下个月”列始于: sep_16sep_18,这意味着aug_16将被删除,而sep_18将被添加。

所以我的问题是:我想将数据复制到另一个Interface表中,并希望在ODI作业中进行映射,然后再加载到基本表中。我应该如何处理动态列名?

1 个答案:

答案 0 :(得分:0)

我想说,最好的选择是放弃这样的数据模型并创建一个新的模型。与其在DDL中做所有事情,不如在DML中做。我的意思是:更改表并添加一个DATE数据类型列。它将显示该行所属的月份/年份。然后,只需处理WHERE子句即可处理数据。

Instead of: update interface set sep_16 = (select sep_16 from base)

You would : insert into interface select * from base
                                  where to_char(date_column, 'yyyymm') = '201609'

这只是一个示例,旨在简化总体思路;这样的WHERE将在DATE_COLUMN破坏可能的索引,但是可以处理(例如,通过使用BETWEEN每月的第一天和最后一天)< / p>