2016-09-26 83 views
0

如何在不创建存储过程的情况下在oracle中实现以下功能?将多行结果分为单行但列不同

Data Set: 

question_id element_id 
1    7 
1    8 
2    9 
3    10 
3    11 
3    12 
Desired Result: 

question_id element_id1 element_id2 element_id3 
1    7    8   null 
2    9    null  null 
3    10    11   12 
+0

你能提供你的表结构 – Beginner

+0

我们可以假设每个'question_id'出现在数据集最多3次(或者是在编译时确定其他一些固定数量) ?或者是否需要根据表中的数据更改结果集中的列数? –

回答

1

这是一个数据透视查询,但您需要一个透视图列。这就是row_number()进来:

select question_id, 
     max(case when seqnum = 1 then element_id end) as element_id1, 
     max(case when seqnum = 2 then element_id end) as element_id2, 
     max(case when seqnum = 3 then element_id end) as element_id3 
from (select t.*, 
      row_number() over (partition by question_id order by element_id) as seqnum 
     from t 
    ) t 
group by question_id; 
+0

确切答案给我....谢谢... – user6884899