無法在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