nic*_*ick 5 database oracle pivot aggregate user-defined
无法在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, typeRun Code Online (Sandbox Code Playgroud)ID TYPE STRING_AGG(VALUE)
user1 CAR Audi,BMW
user1 COMPUTER Dell,Sony
user2 CAR Honda
user2 COMPUTER HP
Run Code Online (Sandbox Code Playgroud)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) );Run Code Online (Sandbox Code Playgroud)ORA-56902: expect aggregate function inside pivot operation
Run Code Online (Sandbox Code Playgroud)TYPE USER1 USER2
COMPUTER Dell,Sony HP
CAR Audi,BMW HondaRun Code Online (Sandbox Code Playgroud)
数据透视不必位于相同的聚合函数上:
select * from
(
select id, type, LISTAGG(value) WITHIN GROUP (ORDER BY 1) 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 (max(value) FOR id IN ('user1' user1, 'user2' user2) );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3900 次 |
| 最近记录: |