[英]Row Values into Column Headers in Oracle
我有一个特定的用例,其中行值需要动态转换为视图列标题。 之所以需要视图,是因为列名取决于可以随时更改的输入表的行值。
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视图或函数可以完成此操作吗?
使用PIVOT
:
Oracle 11g R2架构设置 :
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;
查询1 :
SELECT *
FROM table_name
PIVOT ( MAX( Attribute_Val ) FOR Attribute IN (
'Name' AS name,
'Color' AS color,
'Origin' AS origin,
'Price' AS price
) )
结果 :
| ITEM | CLASS | NAME | COLOR | ORIGIN | PRICE |
|-------|-------|----------|--------|----------|-------|
| Mango | Fruit | Alphonso | Yellow | MEX, IND | 5 |
| Apple | Fruit | Gala | Red | USA | 3 |
假设明天为类“水果”添加了一个新的属性(季节)。 这将在输入表中产生2行(Apple和Mango项各一个),该视图应能够在其输出中动态添加新列“ Season”。
不,这是不可能的。 视图在编译时确定有固定数量的列,并且将数据(或列)添加到父表不会更新该视图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.