我有一个数据库表,它基本上将“民意调查问题”维度扁平化到表中,每个问题占 1 列。
例如:这些是表中的列:
POLL1_QUESTION
POLL1_ANSWER
POLL2_QUESTION
POLL2_ANSWER
POLL3_QUESTION
POLL3_ANSWER
我想要做的是将每一行映射到一个新表中,如下所示:
QUESTION_NUMBER
QUESTION
ANSWER
问题编号列在我的用例中甚至不是必需的,但它会很好。
是否可以将这 1 行 6 列转换为 3 行 2 列?
最佳答案
如果您使用的是 Oracle 数据库 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 之前的版本,请使用 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;
关于sql - 将扁平单行转换为多行 Oracle SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43876489/