2017-11-11 155 views
2

您好,我有以下设置:的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次。有没有更有效的方法解决这个我看不到的问题?

+0

看看这有助于 - https://asktom.oracle.com/pls/apex/asktom.search?tag=conversion-of-列 - 到 - 行 – OldProgrammer

回答

0

最新版本的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; 
相关问题