我有一个表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;
但此查询无法获取所需的输出。 有人可以给我一些语法吗?
答案 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