2015-11-22 191 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