Oracle:如何进行数据透视查询?

时间:2018-12-26 00:06:22

标签: sql oracle pivot aggregate-functions

我有一个这样的表:

表1: ID 号,产品 varchar2,参数 varchar2, AnyData

填满后,它看起来像这样:

enter image description here

我想创建一个视图,例如结果是:

enter image description here

我尝试了以下查询:

select * from 
(select ARGUMENT, VALUE from Table)
pivot 
(first(VALUE) for ARGUMENT in ('Weight','Size','First Use'))

我尝试了两种聚合功能:第一和最大。

对于他们两个,我都会遇到以下错误:

  • ORA-56902:期望枢轴操作中包含聚合函数。
  • ORA-22950:如果没有MAP或ORDER方法,则无法对对象进行订购。

我确实了解这两个错误。数据透视查询可以像这样工作。

但是请问有人知道达到所需结果的另一种方法吗?

谢谢。 干杯,

1 个答案:

答案 0 :(得分:0)

我将使用条件加重功能来执行枢轴操作。

select Product,
       MAX(CASE WHEN ARGUMENT = 'Weight' THEN "VALUE" END) Weight,
       MAX(CASE WHEN ARGUMENT = 'Size' THEN "VALUE" END) Size,
       MAX(CASE WHEN ARGUMENT = 'First Use' THEN "VALUE" END) FirstUse
from 
(
    select 
        Product,
        ARGUMENT, 
        "VALUE"
    from Table
) t1
GROUP BY Product

如果您使用同一张表,则可以尝试选择表而不是直接子查询。

select Product,
       MAX(CASE WHEN ARGUMENT = 'Weight' THEN "VALUE" END) Weight,
       MAX(CASE WHEN ARGUMENT = 'Size' THEN "VALUE" END) Size,
       MAX(CASE WHEN ARGUMENT = 'First Use' THEN "VALUE" END) FirstUse
from Table 
GROUP BY Product
相关问题