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 joincase 获得类似的性能:

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 查询结果行作为具有不同标题名称的列? [关闭]

更新之前的Oracle SQL触发器,用于设置来自其他实体的列值

oracle查询将不同的列填充到一列中