繁体   English   中英

Oracle 11g中的数据透视

[英]Pivot in Oracle 11g

我搜索了有关Oracle 11g中数据透视的Stackoverflow,但找不到适合我的情况的语法。

以下是我的查询(在Oracle 11g中运行)。

select
age,
gender,
sum(hours) as hours
from table1
group by age, gender

这是O / P结果

age gender   hours
25  Male     10
55  Female   5
45  Female   12

...这是我想要的O / P结果

Age  Male   Female
25   10     0
45    0     12
55    0     5

...这是我的查询

select *
from    
(
select
age,
gender,
sum(hours) as hours
from table1
)
pivot (
sum (hours) for gender in (
Male   as 'Male',
Female as 'Female')
)

...这是错误:

ORA-00931: missing identifier

有人可以请我教育吗?

您接近:

select age, nvl(male, 0) male, nvl(female, 0) female
from    
(
  select age,  gender,  sum(hours) as hours
  from table1
  group by age, gender
)
pivot
(
  sum(hours) for gender in ('Male' as male, 'Female' as female)
);

“缺少标识符”错误的原因是-预期的语法是

<Value> As <identifier>

因此,当您给-Male作为'Male'时,它找不到'as'之后的标识符,因此会出现此错误。

同样,即使您纠正了该错误,下一个错误也将显示为“不是单组分组函数”,因为您在选择年龄和性别以及汇总函数总和(小时)而不进行分组时(我刚才提到这是一个技术要点,您实际上不需要按此分组)。

请参考以下代码以获取输出。

   SELECT age,nvl(male,0) AS male,nvl(female,0) AS frmale FROM 
    (SELECT * 
     FROM (
           SELECT age,gender,hours 
           FROM test_subha3) 
           pivot (sum(hours) FOR gender IN ('Male' AS Male,'Female' AS Female))
    )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM