相关疑难解决方法(0)

动态Oracle Pivot_In_Clause

我有点卡住了.我想做一个用户角色关系数据透视表,我的查询到目前为止看起来像这样:

WITH PIVOT_DATA AS (
     SELECT *
     FROM
     (
         SELECT USERNAME, GRANTED_ROLE
         FROM DBA_USERS@DB_LINK U LEFT OUTER JOIN DBA_ROLE_PRIVS@DB_LINK R
         ON U.USERNAME = R.GRANTEE
      )
)
SELECT *
FROM PIVOT_DATA
PIVOT
(
    COUNT(GRANTED_ROLE)
    FOR GRANTED_ROLE
    IN('CONNECT') -- Just an example
)
ORDER BY USERNAME ASC;
Run Code Online (Sandbox Code Playgroud)

它工作得非常好并完成工作,但我不想写任何我要搜索的角色pivot_in_clause,因为我们有大量的它们,我不想每次检查是否有任何变化.

那么,有没有写的方式SELECTpivot_in_clause?我亲自尝试过:

[...]
PIVOT
(
    COUNT(GRANTED_ROLE)
    FOR GRANTED_ROLE
    IN( SELECT ROLE FROM DBA_ROLES@DB_LINK )
)
[...]
Run Code Online (Sandbox Code Playgroud)

但它总是在整个查询的第1行给我一个ORA-00936:"缺少表达式",我不知道为什么.不能有是SELECTpivot_in_clause还是我做错了?

sql oracle pivot

7
推荐指数
1
解决办法
8510
查看次数

动态地转动表Oracle

我有一个看起来像这样的表:

C_ID   P_ID   KEY    VALUE
null   null   KEY1   VALUE1
null   null   KEY2   VALUE2
null   null   KEY3   VALUE3
2       2     KEY4   VALUE4
2       3     KEY5   VALUE5
Run Code Online (Sandbox Code Playgroud)

我想得到这个结果表/视图:

C_ID   P_ID   KEY1    KEY2    KEY3      KEY4    KEY5
NULL   NULL  VALUE1  VALUE2  VALUE3     NULL    NULL
2       2     NULL    NULL    NULL     VALUE4   NULL
2       3     NULL    NULL    NULL      NULL   VALUE5
Run Code Online (Sandbox Code Playgroud)

有谁有想法我怎么能做到这一点?我尝试过:

select * from (select c_id, p_id, r_key, r_value from s_projectroles) pivot (max(r_value) for r_key in (any));
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

ORA-00936: Ausdruck fehlt
00936. 00000 -  "missing expression"
Run Code Online (Sandbox Code Playgroud)

oracle pivot

3
推荐指数
1
解决办法
2685
查看次数

标签 统计

oracle ×2

pivot ×2

sql ×1