我有返回以下結果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
我該如何做到這一點...
我有返回以下結果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
我該如何做到這一點...
定義自定義排序順序任一這樣的:
select *
from Emp
Order By
CASE WHEN IsNumeric(EmpName) = 1 then 0 else 1 end asc,
Empid
或通過添加顯式SortOrder
列表中
[注:ISNUMERIC返回1爲某些字符不在 數字,如加號(+),減號( - )和有效貨幣符號 作爲美元符號($)。對於貨幣符號的完整列表,請參閱 使用貨幣數據]
使用自定義您的排序是這樣排序邏輯:
ORDER BY
CASE
WHEN EMPID = 'A' THEN 1
WHEN EMPID = 'N' THEN 2
ELSE CAST(EMPID AS INT) + 2
END
您也可以使用ISNUMERIC
功能,如米奇小麥的答案說明,以避免明確聲明的情況。但是,如果您有非字母順序,例如'G'應該出現在'A'之前,那麼明確地指定值是很好的。
它給錯誤:在指定的上下文非布爾類型,其中一個條件的預期,近「然後」的體現。 btw這兩列是varchar數據類型.. – Kapil
我錯過了= 1;現在嘗試.... –
這個解決方案的問題是,10將訂購之前的訂購比2。但是由於質量保證局沒有準確描述需要什麼,我想這已經足夠了。這個答案正在做什麼請求 –