Oracle迭代键值对以生成视图

时间:2013-09-20 13:31:34

标签: sql oracle report

我在我的数据库中存储键值对以帮助进行规范化。我想要做的是根据某些标识符迭代我所有匹配的键/值,例如'Apple'或'Banana',并生成一个等同于键/值对的“完整”表格版本的视图。请参阅下面的小提琴获取更多信息:

fiddle

我认为我必须使用各种光标,但我不确定这类问题的“最佳”方法。

3 个答案:

答案 0 :(得分:1)

假设您的ID在视图中唯一标识了所需的行(它们不在您的小提琴示例中),您可以创建如下视图:

create view details_view as
select id,
       max(case when key='Color' then value end) as color,
       max(case when key='Location' then value end) as location,
       max(case when key='Price' then value end) as price,
from   details
group by id;

我曾经写过一个包来帮助生成这样的查询 - 请参阅my blog。 (我也反对这种数据模型here!)

答案 1 :(得分:1)

您的小提琴表明您的数据设计存在缺陷。 除了使用可怕的EAV模型(如Tony Andrews所指出的),您还有一个问题,即您的表中没有主键。

不可能知道苹果的颜色,位置和价格。 根据目前的设置,不可能知道德克萨斯州的苹果是红色还是绿色。

您的小提琴示例的最佳方法是更改​​架构,如下所示:

table fruit_details
(
    id INTEGER,  /* Generate using sequence */
    fruit_type varchar2(50),
    location   varchar2(100),
    price      number(8.2)
);

答案 2 :(得分:0)

每个对象的id必须是唯一的。然后,类型可以成为另一个关键。

fiddle