的Oracle SQL:创建视图,不同的列名称将是一个新的值列
问题描述:
您好,我有以下设置:的Oracle SQL:创建视图,不同的列名称将是一个新的值列
DATE HOUR COLUMN_A COLUMN_B COLUMN_C COLUMN_D
01.01.2017 1 VALUE_A VALUE_B VALUE_C VALUE_D
等
我想有是这样的
DATE HOUR KIND VALUE
01.01.2017 1 COLUMN_A Value_A
01.01.2017 1 COLUMN_B Value_B
01.01.2017 1 COLUMN_C Value_C
01.01.2017 1 COLUMN_D Value_D
现在我把它与UNION ALL
,它将开始扫描表4次。有没有更有效的方法解决这个我看不到的问题?
答
最新版本的Oracle支持横向连接 - 速度更快。在某些版本中,您可以使用unpivot
,但是我发现语法过于专业(语法是神秘的,只对一件事有用)。
你应该得到一个cross join
和case
相似的性能:
select t.date, t.hour, c.kind,
(case c.kind
when 'column_a' then colum_a
when 'column_b' then colum_b
when 'column_c' then colum_c
when 'column_d' then colum_d
end) as value
from t cross join
(select 'column_a' as kind from dual union all
select 'column_b' as kind from dual union all
select 'column_c' as kind from dual union all
select 'column_d' as kind from dual
) c;
看看这有助于 - https://asktom.oracle.com/pls/apex/asktom.search?tag=conversion-of-列 - 到 - 行 – OldProgrammer