2015-10-07 22 views
-2

當我在SQL中執行ORDER BY時,數據看起來像這樣。SQL Order By列,其中分別有數字和字母

ColumnName 
---------- 
1 
100 
10000 
25 
30 
33 
7000 
ABC 
XZY 

我想通過這樣的工作順序。

ColumnName 
---------- 
10000 
7000 
100 
33 
30 
25 
1 
ABC 
XYZ 

先按數字值再按字母順序。

+0

爲了測試它通過使用相同或類似的區分文字數字,投數值,按該desc命令,由其他asc命令 – jarlh

回答

0

解決方案SQL-服務器。您可以使用CASE。值爲數字時,將其轉換爲INT,並按 - 降序排列,否則如果值不是數字,則按升序排列。

QUERY

SELECT ColumnName 
FROM tbl 
ORDER BY CASE WHEN ISNUMERIC(ColumnName) = 1 THEN CAST(ColumnName AS INT) END DESC, 
     CASE WHEN ISNUMERIC(ColumnName) = 0 THEN col END ASC 

注:你必須將數字值的數據類型INT實現正確的順序。如果您嘗試將數值存儲爲varchar,則會得到不正確的結果。例如:

如果我們使用降序,'10000'將會在'7000'之後,因爲'10000'的第一個符號1低於'7000'varchar值的7。所以這將是:

7000 
10000 

DEMO

您可以在SQL FIDDLE

+1

非常感謝,很好,.. .. –

0

使用此解決方案:

SELECT someColum as sort, someColumn, otherColums... 
WHERE someOther = 'somevalue' 
ORDER BY sort ASC, (someColumn +0) ASC