Oracle SQL使用合并创建交叉表
我需要帮助创建交叉表。 我被告知可以使用Merge语句来完成,但我对此感到非常困惑。 也许有人在使用merge语句创建交叉表时遇到了问题 以下是初始表格: 初始表中可以有许多人,结果表中可以有许多列Oracle SQL使用合并创建交叉表,sql,oracle,merge,crosstab,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_
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来实现它。我不知道如何使用“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
...
如果你有太多的人,你可以创建一个程序来完成。
请告诉我,如果你知道如何使用合并或更好的方法来实现这一点:我想你可以尝试使用和这样的组合
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
)
)
)
为什么你试过的东西已经把你弄糊涂了?你能发布你的代码和你不理解的解释吗?我不认为MERGE语句是你想要使用的。最重要的是根据标准执行有条件的插入/更新。>为什么您尝试的内容已经让您感到困惑?我不知道应该使用什么键来链接人员和报告。使用“选择人员”合并到报告中,人员文本在什么条件下?如果不匹配,则插入-如何仅定义要插入的一列?重视文本;