2013-04-06 100 views
0

我需要幫助創建交叉表。 我被告知可以使用Merge語句來完成,但是我對此感到非常困惑。 也許有人有過使用合併語句創建交叉表的過程。Oracle SQL使用合併創建交叉表

這裏是初始表: (有可能是在初始表和結果表中的列多人)

person text 
person_1 some_text_1 
person_1 some_text_2 
person_1 some_text_3 
person_1 some_text_4 
person_1 some_text_5 
person_2 some_text_6 
person_2 some_text_7 
person_2 some_text_8 
person_2 some_text_9 

而且表我需要的結果是:

person_1 person_2 
some_text_1 some_text_6 
some_text_2 some_text_7 
some_text_3 some_text_8 
some_text_4 some_text_9 
some_text_5 

UPD:我知道這可以用pivot或smth來完成。 問題是如何使用MERGE來做到這一點。

+0

組合嘗試做爲什麼你已經什麼試圖讓你感到困惑?你能發佈你的代碼和你不明白的解釋嗎? – Ben 2013-04-06 22:28:50

+1

我不認爲MERGE聲明是您想要使用的。將基於標準執行有條件的插入/更新。 – OldProgrammer 2013-04-06 22:39:03

+0

>爲什麼你試過的東西已經使你困惑? 我不知道我應該用什麼鍵鏈接人員和報告。 '合併到報告 使用(選擇的人,本文從者) ON(--on什麼條件?) WHEN NOT MATCHED然後插入(我 - 如何可以定義只有一列中插入?) VALUES(TEXT );' – user2253044 2013-04-07 07:57:42

回答

0

我不知道如何使用'合併'。其實,我不認爲'合併'可以工作... 這是我的解決方案,它可以滿足您的需求,但不方便...

SELECT A.TEXT AS PERSON_1,B.TEXT AS PERSON_2... 
FROM 
(SELECT TEXT,ROWNUM AS R FROM PERSON_TAB WHERE PERSON='person_1') A 
FULL JOIN 
(SELECT TEXT,ROWNUM AS R FROM PERSON_TAB WHERE PERSON='person_2') B 
ON A.R=B.R 
FULL JOIN 
... 

如果你有太多的「人員」,你可以創建一個過程來做到這一點。 請告訴我,如果你已經知道如何使用合併或更好的方法:)

0

我想你可能與RANKPIVOT這樣

select person_1,person_2 
from (
     select * 
     from (
       select rank() over(partition by person order by text) as idx, person, text 
       from <your_table> 
      ) 
     pivot (
       max(text) for person in (
         'person_1' as person_1, 
         'person_2' as person_2 
        ) 
      ) 
    )