2017-05-09 69 views
2

我有一個數據庫表,它基本上將「輪詢問題」維度扁平化爲每個問題具有1列的表。將扁平化的單行轉換爲多行Oracle SQL

例如:這些都在表中的列:

POLL1_QUESTION 
POLL1_ANSWER 

POLL2_QUESTION 
POLL2_ANSWER 

POLL3_QUESTION 
POLL3_ANSWER 

我想要做的就是每一行映射到一個新的表是這樣的:

QUESTION_NUMBER 
QUESTION 
ANSWER 

問題編號欄ISN甚至在我的使用案例中都是必要的,但它會很好。

是否可以將這6行的1行轉換爲2行的3行?

回答

5

你想用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 
     ) 
); 

對於Oracle 11g之前,使用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