我有点卡住了.我想做一个用户角色关系数据透视表,我的查询到目前为止看起来像这样:
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,因为我们有大量的它们,我不想每次检查是否有任何变化.
那么,有没有写的方式SELECT在pivot_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:"缺少表达式",我不知道为什么.不能有是SELECT在pivot_in_clause还是我做错了?
我有一个看起来像这样的表:
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)