2017-11-11 9 views
2

になりますビューを作成しますこんにちは、私は次のセットアップがありますのOracle SQL:異なる列名は1つの新しい値列

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 

は今、私はテーブルを4回のスキャンを開始しますUNION ALLでそれを作ります。私は見えないこの問題のためのより効率的な方法がありますか?

+0

このことができますかどうかを確認 - https://asktom.oracle.com/pls/apex/asktom.search?tag=conversion-of-を列から列へ – OldProgrammer

答えて

0

Oracleの最新バージョンは、横結合をサポートしています。これは高速です。いくつかのバージョンではunpivotを使用することができますが、その構文は過度に特殊化されています(構文は秘密であり、1つの目的にのみ役立ちます)。

あなたは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; 
関連する問題