0

我需要帮助创建交叉表。有人告诉我可以使用 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:我知道它可以通过枢轴或其他方式来完成。问题是如何使用 MERGE 来做到这一点。

4

2 回答 2

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
                    )
            )
    )
于 2013-04-07T09:31:01.773 回答
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
...

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

于 2013-04-07T02:33:01.077 回答