在Oracle中将行值转换为列标题

时间:2018-08-31 22:22:29

标签: sql database oracle oracle11g

我有一个特定的用例,其中行值需要动态转换为视图列标题。之所以需要视图,是因为列名取决于可以随时更改的输入表的行值。

输入:表格

Item   Class   Attribute  Attribute_Val
------ ------- ---------- -------------
Apple  Fruit   Name       Gala 
Apple  Fruit   Color      Red 
Apple  Fruit   Origin     USA
Apple  Fruit   Price      3 
Mango  Fruit   Name       Alphonso
Mango  Fruit   Color      Yellow 
Mango  Fruit   Origin     MEX, IND
Mango  Fruit   Price      5

预期的输出:来自数据库视图

Item   Class   Name     Color  Origin  Price
------ ------- -----    ------ ------  -----
Apple  Fruit   Gala     Red    USA     3
Mango  Fruit   Alphonso Yellow MEX,IND 5

让我们说明天为“水果”类添加一个新的属性(季节)。它将在输入表中产生2行(每行分别用于Apple和Mango项目),并且该视图应能够在其输出中动态添加新列“ Season”。

这可以通过Oracle View或Function完成吗?

1 个答案:

答案 0 :(得分:1)

使用pwd

SQL Fiddle

Oracle 11g R2架构设置

set path+=/some/src

查询1

PIVOT

Results

CREATE TABLE table_name ( Item, Class, Attribute, Attribute_Val ) AS
SELECT 'Apple', 'Fruit', 'Name',   'Gala'     FROM DUAL UNION ALL
SELECT 'Apple', 'Fruit', 'Color',  'Red'      FROM DUAL UNION ALL
SELECT 'Apple', 'Fruit', 'Origin', 'USA'      FROM DUAL UNION ALL
SELECT 'Apple', 'Fruit', 'Price',  '3'        FROM DUAL UNION ALL
SELECT 'Mango', 'Fruit', 'Name',   'Alphonso' FROM DUAL UNION ALL
SELECT 'Mango', 'Fruit', 'Color',  'Yellow'   FROM DUAL UNION ALL
SELECT 'Mango', 'Fruit', 'Origin', 'MEX, IND' FROM DUAL UNION ALL
SELECT 'Mango', 'Fruit', 'Price',  '5'        FROM DUAL;
  

让我们说明天为“水果”类添加一个新的属性(季节)。它将在输入表中产生2行(每行分别用于Apple和Mango项目),并且该视图应能够在其输出中动态添加新列“ Season”。

否,这是不可能的。视图在编译时确定有固定的列数,并且将数据(或列)添加到父表不会更新该视图。