【问题标题】:How to Convert Columns to rows in OracleOracle中如何将列转换为行
【发布时间】:2021-05-11 20:34:41
【问题描述】:

我有如下数据,并试图在 Oracle 中将列转换为行。但我收到“Pivot is a Invalid Identifier”。

示例源数据:

DEPTNO DEPTNAME SAL 
10     HR       1000
10    ACCOUNTS  2000
20     HR       3000
20    ACCOUNTS  4000
10    CLERK     5000

预期输出:

DEPTNO  HR   ACCOUNTS CLERK
10     1000   2000     5000
20     3000   4000

我尝试在查询下方运行,但以错误结束。请帮我解决这个问题。

select *
from   table( pivot(' select deptno
                      ,      job
                      ,      SAL
                      from   emp
                      group
                      by     deptno
                      ,      job
                    ')
            )

错误:

PIVOT 是一个无效的修饰符。

【问题讨论】:

    标签: sql oracle10g


    【解决方案1】:

    使用条件聚合:

    select deptno,
           sum(case when deptname = 'HR' then salary end) as hr,
           sum(case when deptname = 'ACCOUNTS' then salary end) as accounts,
           sum(case when deptname = 'CLERK' then salary end) as clerk
    from t
    group by deptno;
    

    【讨论】:

    • 在我的生产数据中,我们在 DEPTNAME 中有大约 400 个值,有没有办法动态获取值而不是硬编码值。提前感谢您的支持。
    • @Sudha。 . .我建议您使用电子表格构建查询。
    猜你喜欢
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    相关资源
    最近更新 更多