我想知道是否可以在Oracle 11g中将某些行显示为列。
我想要以下
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
需要聚合函数。
答案 0 :(得分:2)
假设每个ID每个语言都有一个文本,您可以在max
的文本列中使用min
或pivot
。
select * from tablename
pivot
(max(text) for language in ('english' as ENGLISH,'german' as GERMAN))
编辑:根据OP的评论如果我不想在这种情况下选择所有内容,我很难弄清楚SELECT查询的工作原理。选择某些东西,文本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))