Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将展开的单行转换为多行Oracle SQL_Sql_Oracle_Plsql_Oracle Sqldeveloper - Fatal编程技术网

将展开的单行转换为多行Oracle SQL

将展开的单行转换为多行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行?

我有一个数据库表,它基本上将“poll-question”维度展平到表中,每个问题有一列

例如:表中有以下列:

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;