Oracle SQL - Rows into Columns



我想知道在Oracle11g中是否可以将一些行显示为列。

我想要以下

id      language     text
--------------------------
1       english      some example
1       german       an example
2       english      test
2       german       test123

显示方式如下:

id      english        german
---------------------------------
1       some example   an example
2       test           test123

我尝试使用pivot,但无法正确处理它,因为pivot需要一个聚合函数。

假设每个id每个语言有一个文本,则可以在pivot的文本列上使用maxmin

select * from tablename
pivot
(max(text) for language in ('english' as ENGLISH,'german' as GERMAN))

编辑:根据OP的评论,如果我不想在这种情况下选择所有内容,我很难弄清楚SELECT查询是如何工作的。SELECT something,text FROM tablename或类似内容不起作用

记住,你应该选择你正在pivot中的所有列。

select * from 
(select text,language,id,something from tablename) t
pivot
(max(text) for language in ('english' as ENGLISH,'german' as GERMAN))

编辑:至unpivot使用

select * 
from (
select * from 
(select text,language,id,something from tablename) t
pivot
(max(text) for language in ('english' as ENGLISH,'german' as GERMAN))
) p 
unpivot (text for language in (ENGLISH, GERMAN))

最新更新