2016-09-26 87 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