在 ORACLE 中将一组列转换为行 SQL
Convert a set of columns into rows in ORACLE SQL
我有一个查询 returns table 看起来有点像下面。
在图像中,我希望输入 table 看起来像输出 table --
本质上,我希望将列中的所有数据转置为行。但我不想将行转换为列。
我已经看到了转置行和列的解决方案,但想检查是否有任何人知道的更简单的方法。任何帮助表示赞赏!
TIA
在 Oracle 中,我建议使用横向连接来反转 table。假设列名为 hour0
、hour1
、hour2
、...,这将表述为:
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'))
我有一个查询 returns table 看起来有点像下面。
在图像中,我希望输入 table 看起来像输出 table --
本质上,我希望将列中的所有数据转置为行。但我不想将行转换为列。
我已经看到了转置行和列的解决方案,但想检查是否有任何人知道的更简单的方法。任何帮助表示赞赏!
TIA
在 Oracle 中,我建议使用横向连接来反转 table。假设列名为 hour0
、hour1
、hour2
、...,这将表述为:
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'))