2014-06-16 37 views
1

我有返回以下結果SQL查詢:如何跳過使用順序在SQL服務器數

select * from Emp Order By EmpName asc 

結果:

Empid EmpName 
1   1 
2   2 
3   3 
A   ALL 
N   NOTALL 

,但我想輸出象下面這樣:

Empid EmpName 
A   ALL 
N   NOTALL 
1   1 
2   2 
3   3 

我該如何做到這一點...

回答

2

定義自定義排序順序任一這樣的:

select * 
from Emp 
Order By 
    CASE WHEN IsNumeric(EmpName) = 1 then 0 else 1 end asc, 
    Empid 

或通過添加顯式SortOrder列表中

[:ISNUMERIC返回1爲某些字符不在 數字,如加號(+),減號( - )和有效貨幣符號 作爲美元符號($)。對於貨幣符號的完整列表,請參閱 使用貨幣數據]

+0

它給錯誤:在指定的上下文非布爾類型,其中一個條件的預期,近「然後」的體現。 btw這兩列是varchar數據類型.. – Kapil

+0

我錯過了= 1;現在嘗試.... –

+0

這個解決方案的問題是,10將訂購之前的訂購比2。但是由於質量保證局沒有準確描述需要什麼,我想這已經足夠了。這個答案正在做什麼請求 –

0

使用自定義您的排序是這樣排序邏輯:

ORDER BY 
CASE 
WHEN EMPID = 'A' THEN 1 
WHEN EMPID = 'N' THEN 2 
ELSE CAST(EMPID AS INT) + 2 
END 

您也可以使用ISNUMERIC功能,如米奇小麥的答案說明,以避免明確聲明的情況。但是,如果您有非字母順序,例如'G'應該出現在'A'之前,那麼明確地指定值是很好的。