Oracle SQL - 行成列
Oracle SQL - Rows into Columns
我想知道是否可以在 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
需要聚合函数。
假设每个 id 每个语言有一个文本,您可以在 pivot
.
中的文本列中使用 max
或 min
select * from tablename
pivot
(max(text) for language in ('english' as ENGLISH,'german' as GERMAN))
编辑:根据 OP 的评论 如果我不想 select 在这种情况下的所有内容,我无法弄清楚 SELECT 查询是如何工作的。 SELECT 一些东西,来自表名的文本或类似的东西不起作用
请记住,您应该 select 您正在 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))
我想知道是否可以在 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
需要聚合函数。
假设每个 id 每个语言有一个文本,您可以在 pivot
.
max
或 min
select * from tablename
pivot
(max(text) for language in ('english' as ENGLISH,'german' as GERMAN))
编辑:根据 OP 的评论 如果我不想 select 在这种情况下的所有内容,我无法弄清楚 SELECT 查询是如何工作的。 SELECT 一些东西,来自表名的文本或类似的东西不起作用
请记住,您应该 select 您正在 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))