2015-10-07 11 views
-1

我已經有我需要的表排序利用:分配軍銜已經排序表

order by 
case when name = 'zzz' then '1' else null end asc 
case when name = 'aaa' then '2' else null end asc 
case when name = 'rrr' then '3' else null end asc 
... 
... 

現在,我想排名我的表的電流爲了得到某事像這樣:

new_rank name 
1   zzz 
2   aaa 
3   rrr 
...   ... 
...   ... 

我嘗試row_number() over()但實際上我沒有列排序。

回答

0

您在row_number()語句重複order by

select t.*, 
     row_number() over (order by (case when name = 'zzz' then 1 end) asc, 
            (case when name = 'aaa' then 2 end) asc, 
            (case when name = 'rrr' then 3 end) asc 
         ) as seqnum 
from . . . 

注:

  • 沒有理由使用字符串,而不是爲常數的數字。
  • else NULLcase表達式中是多餘的。
  • 無論在哪裏出現密鑰,都應該用逗號分隔order by

而且,考慮到case只使用常數,你還不如用只有一個:

select t.*, 
     row_number() over (order by (case when name = 'zzz' then 1 
             when name = 'aaa' then 2 
             when name = 'rrr' then 3 
             else 4 
            end) 
         ) as seqnum 
from . . . 
+0

這麼簡單,謝謝你,偉大工程:) – Wasciu