当前位置: 代码迷 >> 数据仓库 >> ETL中出现一个简单的有关问题,多年经验的高手来看一上
  详细解决方案

ETL中出现一个简单的有关问题,多年经验的高手来看一上

热度:2510   发布时间:2013-02-26 00:00:00.0
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

基本这样就可以了
  相关解决方案