Oracle SQL使用merge创建交叉表

时间:2013-04-06 21:50:49

标签: sql oracle merge crosstab

我需要帮助创建交叉表。 我被告知可以使用Merge语句完成,但我对它感到很困惑。 也许有人在使用merge语句来创建交叉表时已经过时了。

这是初始表: (初始表中可能有很多人,结果表中可能有很多列)

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。

2 个答案:

答案 0 :(得分:0)

我不知道如何使用'merge'来实现它。实际上,我不认为'merge'可以工作...... 这是我的解决方案,可以满足您的需求,但不方便...

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
...

如果你有太多的“人”,你可以创建一个行动来做到这一点。 请告诉我,如果您已经知道如何使用合并或更好的方式:)

答案 1 :(得分: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
                    )
            )
    )