从名称值对表创建Oracle视图

时间:2012-07-18 03:24:59

标签: oracle view name-value

民间,

我有一个具有名称值对的oracle数据库表。 row_num标识一组名称值对。设置大小也可能有所不同。

我想创建一个视图,将视图中的一组名称值对转换为一行。

我希望我的问题很清楚

请告诉我如何定义

我为表创建提供了示例sql并为方便起见插入

由于

create table name_value_pair (row_num varchar2(32), name varchar2(32),value varchar2(32));

insert into name_value_pair values ('row1', 'Col1', 'Val11');
insert into name_value_pair values ('row1', 'Col2', 'Val12');
insert into name_value_pair values ('row1', 'Col3', 'Val13');
insert into name_value_pair values ('row1', 'Col4', 'Val14');
insert into name_value_pair values ('row1', 'Col5', 'Val15');

insert into name_value_pair values ('row2', 'Col1', 'Val21');
insert into name_value_pair values ('row2', 'Col2', 'Val22');
insert into name_value_pair values ('row2', 'Col3', 'Val23');
insert into name_value_pair values ('row2', 'Col4', 'Val24');
insert into name_value_pair values ('row2', 'Col5', 'Val25');

insert into name_value_pair values ('row3', 'Col1', 'Val31');
insert into name_value_pair values ('row3', 'Col2', 'Val32');
insert into name_value_pair values ('row3', 'Col3', 'Val33');
insert into name_value_pair values ('row3', 'Col4', 'Val34');
insert into name_value_pair values ('row3', 'Col5', 'Val35');

insert into name_value_pair values ('row4', 'Col1', 'Val41');
insert into name_value_pair values ('row4', 'Col2', 'Val42');
insert into name_value_pair values ('row4', 'Col3', 'Val43');
insert into name_value_pair values ('row4', 'Col4', 'Val44');
insert into name_value_pair values ('row4', 'Col5', 'Val45');

insert into name_value_pair values ('row5', 'Col1', 'Val51');
insert into name_value_pair values ('row5', 'Col2', 'Val52');
insert into name_value_pair values ('row5', 'Col3', 'Val53');
insert into name_value_pair values ('row5', 'Col4', 'Val54');
insert into name_value_pair values ('row5', 'Col5', 'Val55');

commit;

1 个答案:

答案 0 :(得分:1)

您可以在创建视图时使用查询:

select
  row_num, 
  max(decode(name, 'Col1', value)) col1, 
  max(decode(name, 'Col2', value)) col2,
  ...
from name_value_pair
group by row_num;

也许您应该重新考虑数据模型。这种数据模型很糟糕。查询无法优化,难以设置约束,几乎不可能保持数据完整性。