需要帮助才能获得正确的sql查询

时间:2015-11-22 06:18:12

标签: sql oracle

我有一个表Employee,其中一个属性是' Gender'。在“性别”列中,我们有两种类型的记录'男性'或者'女性' 现在我想写一个查询,它应该给我一个输出,如第一条记录应该是'男性'第二条记录'女性'第三条记录'男性' , 第四名为女性'。

我使用下面的查询来获取上面提到的记录

select name, empid, salary, gender, rownum rn, case gender when 'Male' then 
    rn = (select * from (select rownum rn  from Employee) where mod (rn, 2) <> 0)
    else rn = (select * from (select rownum rn  from Employee) where mod (rn, 2) = 0) end as Org_Gender form employee;

但此查询无法获取所需的输出。 有人可以给我一些语法吗?

1 个答案:

答案 0 :(得分:1)

这应该这样做:

select empid, name, gender
from (
  select name, empid, gender,
         row_number() over (partition by gender order by name) as rn
  from employee
) t
order by rn, gender

row_number() over (partition by gender ..)会将所有女性从1到x编号,所有男性从1到x。通过使用该值对外部查询进行排序,最终输出将具有第一个女性,然后是第一个男性,第二个女性,第二个男性等等。

SQLFiddle示例:http://sqlfiddle.com/#!4/23f656/2