相关疑难解决方法(0)

在Oracle中动态地将行旋转到列中

我有以下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 10g,但11g解决方案也可以.

当您知道可以调用您的透视列时,有很多示例,但我找不到Oracle的通用透视解决方案.

谢谢!

sql oracle pivot oracle10g

25
推荐指数
3
解决办法
14万
查看次数

动态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 ×2

pivot ×2

sql ×2

oracle10g ×1