首页 > 解决方案 > 在 Oracle 11g 上将行转换为列

问题描述

我有一个包含两列(名称和性别)的表。我的表中有 4 条记录。

Name  Gender
A       Male
B       Female
C       Male
D       Female

我想编写一个 SQL 查询来将上述数据转换为以下格式。

Male      Female
A           B    
C           D

标签: sqloracle

解决方案


另一种类似于 Tim 的可能性,但只需要一个 CTE:

with numbered as (
   select name, gender, row_number() over (partition by gender order by name) as rn
   from the_table
)
select f.name as "Female", m.name as "Male"
from numbered f 
  full outer join numbered m on m.rn = f.rn and m.gender = 'Male'
where f.gender = 'Female';

如果每个性别的行数不同,通过使用完整的外部连接,这也可以工作。

在线示例


推荐阅读