2017-11-11 157 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; 
相關問題