2017-05-09 26 views
2

データベース・テーブルは、質問ごとに1列のテーブルに 'poll question'ディメンションを基本的にフラットにしています。例えばフラット化された単一行を複数の行に変換するOracle SQL

:これらは表の列です:

POLL1_QUESTION 
POLL1_ANSWER 

POLL2_QUESTION 
POLL2_ANSWER 

POLL3_QUESTION 
POLL3_ANSWER 

私がやりたいことは、このような新しいテーブルに各行をマップである:

QUESTION_NUMBER 
QUESTION 
ANSWER 

質問番号欄ISN私のユースケースでは必要なことさえありますが、それはいいでしょう。

6行のこの1行を代わりに2列の3行に変換できますか?

答えて

5

あなたは上記のOracle Database 11gを使用している場合やUNPIVOTを使用したい:Oracle 11gの前にするために

select * 
from your_table 
unpivot (
    (question, answer) 
    for question_id in (
     (question1, answer1) as 1, 
     (question2, answer2) as 2, 
     (question3, answer3) as 3 
     ) 
); 

を、case(またはdecode)を使用します。

select 
    n as question_id, 
    case n 
     when 1 then question1 
     when 2 then question2 
     when 3 then question3 
    end as question, 
    case n 
     when 1 then answer1 
     when 2 then answer2 
     when 3 then answer3 
    end as answer 
from your_table 
cross join (
    select level as n 
    from dual 
    connect by level <= 3 
) x; 
+0

はUNPIVOTは完全に働きました。ありがとう! – corycorycory

関連する問題