database – Oracle PIVOT子句中的用户定义聚合函数

前端之家收集整理的这篇文章主要介绍了database – Oracle PIVOT子句中的用户定义聚合函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
无法在Oracle PIVOT子句中使用用户定义的聚合函数.

我创建了一个名为string_agg的用户定义聚合函数.
我可以在一个简单的声明中使用它,例如……

select id,string_agg(value) from
(
    select 'user1' as id,'BMW' as value,'CAR'      as type from dual    union
    select 'user1' as id,'Audi' as value,'CAR'      as type from dual    union
    select 'user2' as id,'Honda' as value,'Dell' as value,'COMPUTER' as type from dual    union
    select 'user1' as id,'Sony' as value,'COMPUTER' as type from dual    union
    select 'user2' as id,'HP' as value,'COMPUTER' as type from dual 
)
group by id,type

结果是:

ID TYPE STRING_AGG(VALUE)
user1       CAR             Audi,BMW
user1       COMPUTER        Dell,Sony
user2       CAR             Honda
user2       COMPUTER        HP

但是当我尝试在pivot子句中使用相同的函数

select * from
( 
    select id,type,string_agg(value) as value from
    (
        select 'user1' as id,'CAR'      as type from dual    union
        select 'user1' as id,'CAR'      as type from dual    union
        select 'user2' as id,'COMPUTER' as type from dual    union
        select 'user1' as id,'COMPUTER' as type from dual    union
        select 'user2' as id,'COMPUTER' as type from dual 
    )
    group by id,type
)
PIVOT (string_agg(value) FOR id IN ('user1' user1,'user2' user2) );

我收到以下错误

ORA-56902: expect aggregate function inside pivot operation

预期结果是……

TYPE USER1 USER2
COMPUTER    Dell,Sony   HP       
CAR         Audi,BMW    Honda

解决方法

Pivot不必超过相同的聚合函数

select * from
( 
    select id,LISTAGG(value) WITHIN GROUP (ORDER BY 1) as value from
    (
        select 'user1' as id,type
)
PIVOT (max(value) FOR id IN ('user1' user1,'user2' user2) );

猜你在找的Oracle相关文章