我想知道在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
的文本列上使用max
或min
。
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))