我有以下Oracle 10g表名为_kv:
select * from _kv
ID K V
---- ----- -----
1 name Bob
1 age 30
1 gender male
2 name Susan
2 status married
Run Code Online (Sandbox Code Playgroud)
我想使用纯SQL(而不是PL/SQL)将我的密钥转换为列,以便生成的表看起来像这样:
ID NAME AGE GENDER STATUS
---- ----- ----- ------ --------
1 Bob 30 male
2 Susan married
Run Code Online (Sandbox Code Playgroud)
K存在的唯一s 一样多的列(没有那么多)当您知道可以调用您的透视列时,有很多示例,但我找不到Oracle的通用透视解决方案.
谢谢!
我有点卡住了.我想做一个用户角色关系数据透视表,我的查询到目前为止看起来像这样:
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还是我做错了?