当我在SQL中执行ORDER BY
时,数据看起来像这样。
ColumnName
----------
1
100
10000
25
30
33
7000
ABC
XZY
我希望订单按此方式工作。
ColumnName
----------
10000
7000
100
33
30
25
1
ABC
XYZ
首先按数值排序,然后按字母排序。
答案 0 :(得分:0)
使用此解决方案:
SELECT someColum as sort, someColumn, otherColums...
WHERE someOther = 'somevalue'
ORDER BY sort ASC, (someColumn +0) ASC
答案 1 :(得分:0)
SQL-Server 的解决方案。
您可以使用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
<强>样本强>
您可以在 SQL FIDDLE
进行测试答案 2 :(得分:0)
您可以通过以下SQL查询来实现:
SELECT ColumnName
FROM tbl
ORDER BY CAST(ColumnName as UNSIGNED) DESC, ColumnName ASC;