无法在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, 'CAR' as type from dual union
select 'user1' as id, '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
然而,当我尝试使用相同的功能枢轴条款
select * from
(
select id, type, string_agg(value) as 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, 'CAR' as type from dual union
select 'user1' as id, '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
)
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
“select table,string_agg(value)from table1”将给出一个ORA-00937错误,因为您没有group by子句。你可以给我们一个完整的例子,一些与枢轴和你的聚合功能的SQL失败。 – Gerrat
感谢您的反馈。编辑原始帖子以提供详细示例 – nick
看起来您正在使用此处的string_agg函数:http://www.oracle-base.com/articles/misc/StringAggregationTechniques.php。我找不到任何失败原因。也许一个bug(也许枢轴不适用于用户定义的聚合函数)?如果您将第二次出现的string_agg更改为“max”,它会给出您想要的结果,但 – Gerrat