ETL中出现一个简单的问题,多年经验的高手来看一下
我们目前使用Oracle 10g,有一个customer表储存用户的数据,还有个address表储存用户的办公室和居住地址。
在这个address表中,有个addresstype,就是来说明用户的住址是什么类型,不过地址不是完全的,就是说有的customer对应的数据,在地址表中只有办公室地址没有住址。数据当时设计的时候只考虑ERP用户操作了,根本没考虑什么数据仓库。
表的结构,目前customer表的主键是cust_id,address也用了这个当作一个外键来对应数据。就是说对应的每个顾客都有地址存放在地址表里面。
所以数据大概如下
customer 用户信息表
cust_id ...
1 ...
2...
3...
address 地址表
cust_id addresstype ...
1 office ...
1 residential ...
2 office ...
3 office ...
上面大概就是说1号顾客有两个地址,2号3号顾客都只有办公室地址。
请问这种情况我该如何把表格变形?
我的设想是如果addresstype = residential,我就把这行合并到office去,反正都是同一个customer,他们的cust_id一样。
如果是这样我应该怎么做?
再oracle data miner中如何实现这个功能?
我目前在新加坡工作,遇到这个小困难请高手指点。
[解决办法]
行列转换
把行记录转成列记录
address 地址表
cust_id office,residential ...
1 aaa bbbb
2 ccc
3 ddd
4 ddd
没有的就为空
具体的语句就是用case
select cust_id,office=max(case addresstype when office then office else '' end ),residential ==max(case addresstype when residential then residential else '' end ),
from address
group by cust_id
基本这样就可以了