2015-11-22 145 views
-1

我有一个Employee表,它的一个属性是'Gender'。在性别列中,我们有两种类型的记录“男性”或“女性” 现在我想写一个查询,应该给我一个输出,如第1条记录应该是'男',第2记录'女',第3'男', 第四名为'女'。需要帮助才能得到正确的sql查询

我用下面的查询来获取记录上述

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

'rn = ...'无效SQL。你不能像这样分配变量。如果你想为一个变量赋值,你需要PL/SQL和'select .. into ..' –

回答

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