Oracle 大纵表 转 横表的问题

boco 发布于 2013/05/14 15:23
阅读 1K+
收藏 0

纵表结构如下 

内容表:(大概有千万条)

create table SHEET_ATTR
(
  id           NUMBER not null, 主键,没有啥意义
  name      NUMBER not null, 可以理解为表单名称 例如(姓名,性别,地址,电话,等等六十余项)
  string_value VARCHAR2(3072),对应的字符串值,如果没有可以为空
  number_value NUMBER,对应的数字值,如果没有可以为空
  date_value   TIMESTAMP(6),对应日期的值,如果没有可以为空
  sheet_id     NUMBER not null,表示的是表单的ID,
)

表单表:

create table SHEET
(
  id         NUMBER not null,主键,与内容表的sheet_id对应
  name       VARCHAR2(64) not null表单名称
)

我现在想转换成

sheet_id 姓名 性别 地址 等等...其他六十余项
1 张三 北京.... .....
2    李四 哈尔滨.... .....


目前使用的方式是:

create or replace view sheet_v as
select a.id as SHEET_ID,
(select STRING_VALUE from SHEET_ATTR where name='姓名' and SHEET_ID=a.ID) as '姓名',
(select STRING_VALUE from SHEET_ATTR where name='性别' and SHEET_ID=a.ID) as '性别',
(select STRING_VALUE from SHEET_ATTR where name='地址' and SHEET_ID=a.ID) as '地址',
(select DATE_VALUE from SHEET_ATTR where name='出生日期' and SHEET_ID=a.ID) as '出生日期',

..........

FROM WF_SHEET  a;

问题描述,很明显 现在随着数据量越来越大,系统已经非常慢了,请各位ORACLE大拿帮助出主意,谢谢!

加载中
0
IdleMan
IdleMan

没有执行计划;

尝试物化视图。

IdleMan
IdleMan
物化视图本来就可以实时刷新
boco
boco
不太了解物化视图,正在查看,不过列表数据的查询要求是实时的.流程系统,上一个人加的信息,第二个人要求马上看到.
0
黄龍
黄龍
存储过程
boco
boco
利用存储过程做什么呢
0
StormFour
StormFour

这表设计的本来就有问题

boco
boco
强烈同感!
0
huan
huan
最笨的行转列也不是这个写法啊。用 case when 一个select 就能搞定的。
boco
boco
我尝试了用decode 函数 最终发现需要一个group 于是就放弃了.
0
boco
boco
这是设计的事,最终我还是改成横表了,很崩溃。。
返回顶部
顶部