当前位置: 首页 > 知识库问答 >
问题:

在Oracle中将行值放入列标题中

乜清野
2023-03-14
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

这可以通过Oracle视图或函数来完成吗?

共有1个答案

拓拔谭三
2023-03-14

使用透视:

SQL小提琴

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;
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 |
 类似资料:
  • 问题内容: 插入后如何在Oracle 12c中返回标识列(id)的值?似乎大多数方法都使用序列来获取插入项的ID。 问题答案: 只需使用 RETURNING 子句。 例如 - 测试用例 -

  • 问题内容: 我有以下代码,该代码将pandas数据框的一列中的值用作新数据框的列。数据框第一列中的值成为新数据框的索引。 从某种意义上说,我想将一个邻接表转换成一个邻接矩阵。这是到目前为止的代码: 这适用于此特定实例: 如果col3中的值不是数字,它将失败。我的问题是,是否有更优雅/更稳健的方式来做到这一点? 问题答案: 这看起来像是枢轴工作: 产量 如果您不希望使用MultiIndex列,则可以

  • 问题内容: 我知道,如果我在此答案中使用语法,则可以使用一条语句插入多行。 但是,我要插入的值之一取自一个序列,即 如果尝试运行它,则会收到ORA-02287错误。有什么办法解决这个问题,还是我应该只使用很多INSERT语句? 编辑: 如果我必须为序列以外的所有其他列指定列名,那么我会失去原来的简洁性,所以这是不值得的。在这种情况下,我将只使用多个INSERT语句。 问题答案: 这有效:

  • 问题内容: 我想用SQL对行进行分组,我的结果集如下 name size date data1 123 12/03/2009 data1 124 15/09/2009 data2 333 02/09/2010 data2 323 02/11/2010 2010 data2 673 2014/02/09 data2 444 05/01/2010 我想对结果集进行这样的分组: data1 123 12

  • 问题内容: 我正在尝试转置非常基本的输出以用于Web应用程序。由于我的优势还在于mysql,因此,我想在它到达应用程序之前就做到这一点。 我目前拥有的是: 我想要的是: 我的SQL是: 我已经在网上进行了大量研究,但我找不到解决此问题的好方法。这将是动态的,因为日期每天都会更改。 问题答案: 这是一个动态sql,用于透视记录, SQLFiddle演示

  • 我不确定如何开始这个,希望得到一些想法,可以帮助我。 我的代码示例: