Oracle SQL:创建视图,其中不同的列名称将成为一个新的值列
Posted
技术标签:
【中文标题】Oracle SQL:创建视图,其中不同的列名称将成为一个新的值列【英文标题】:Oracle SQL: Create view where different columns names will be one new Value Column 【发布时间】:2017-11-11 15:32:10 【问题描述】:您好,我有以下设置:
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 次。对于我看不到的这个问题,有没有更有效的方法?
【问题讨论】:
看看这是否有帮助 - asktom.oracle.com/pls/apex/… 【参考方案1】:最新版本的 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;
【讨论】:
以上是关于Oracle SQL:创建视图,其中不同的列名称将成为一个新的值列的主要内容,如果未能解决你的问题,请参考以下文章
oracle 创建视图 提示列名重复,我知道应该是重名的列,重命名一下 怎么命名啊?
在 Oracle SQL 中组合不同的日期和时间列以创建一个具有日期/时间格式的列
oracle forms builder pl/sql - 访问从其他列派生的列
如何将 SQL 查询结果行作为具有不同标题名称的列? [关闭]