在 ORACLE 中将一组列转换为行 SQL

Convert a set of columns into rows in ORACLE SQL

我有一个查询 returns table 看起来有点像下面。

在图像中,我希望输入 table 看起来像输出 table --

本质上,我希望将列中的所有数据转置为行。但我不想将行转换为列。

我已经看到了转置行和列的解决方案,但想检查是否有任何人知道的更简单的方法。任何帮助表示赞赏!

TIA

在 Oracle 中,我建议使用横向连接来反转 table。假设列名为 hour0hour1hour2、...,这将表述为:

select t.department, x.*
from mytable t
cross apply (
    select 0 as hour, t.hour0 as value from dual
    union all select 1, t.hour1 from dual
    union all select 2, t.hour2 from dual
    union all ...
) x

就像你已经知道需要将 rows 转换为 columns PIVOT 一样,将 columns 转换为 rows 我们需要 UNPIVOT.

由于没有指定列名的特定 table 我使用 WITH 子句创建一个临时 table 来演示。 Here是link了解更多UNPIVOT中使用的子句供大家参考

with table1
as
(
select 'Inbound' department, 50 hour0, 44 hour1, 29 hour2, 47 hour3, 17 hour4 from dual
union all
select 'Outbound', 6, 4, 10, 24, 39 from dual
union all
select 'Returns', 3, 1, 39, 43, 35 from dual
)
select *
  from table1 t1
unpivot (value for hour in (hour0 as '0',hour1 as '1',hour2 as '2',hour3 as '3',hour4 as '4'))