将展开的单行转换为多行Oracle SQL
我有一个数据库表,它基本上将“poll-question”维度展平到表中,每个问题有一列 例如:表中有以下列:将展开的单行转换为多行Oracle SQL,sql,oracle,plsql,oracle-sqldeveloper,Sql,Oracle,Plsql,Oracle Sqldeveloper,我有一个数据库表,它基本上将“poll-question”维度展平到表中,每个问题有一列 例如:表中有以下列: POLL1_QUESTION POLL1_ANSWER POLL2_QUESTION POLL2_ANSWER POLL3_QUESTION POLL3_ANSWER 我要做的是将每一行映射到一个新表中,如下所示: QUESTION_NUMBER QUESTION ANSWER 在我的用例中,问题编号列甚至不是必需的,但它会很好 是否可以将包含6列的这1行转换为包含2列的3行?
POLL1_QUESTION
POLL1_ANSWER
POLL2_QUESTION
POLL2_ANSWER
POLL3_QUESTION
POLL3_ANSWER
我要做的是将每一行映射到一个新表中,如下所示:
QUESTION_NUMBER
QUESTION
ANSWER
在我的用例中,问题编号列甚至不是必需的,但它会很好
是否可以将包含6列的这1行转换为包含2列的3行?如果您使用的是Oracle database 11g或更高版本,您希望使用UNPIVOT:
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之前的版本,用例或解码:
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;