我想在街上订购结果,然后返回另一边进行实地审查工作流程(100,102,104,105,103,101)。
我有:
ORDER BY
s.situs_street,
CAST([situs_num]%2 as integer),
CAST(situs_num as integer)
这让我获得了所有的优势,但是他们都在提升。
使用:
ORDER BY
s.situs_street,
CAST([situs_num]%2 as integer) ASC,
CAST(situs_num as integer) DESC
将偶数/奇数降低。由于我反向排序相同的字段,因此使用CASE
语句失败了。
答案 0 :(得分:0)
使用case
表达式对列进行排序,首先输入偶数,然后输入奇数。在分类的组中,在situs_num上再使用一种方法来获得所需的结果。
order by
s.situs_street
,case when cast([situs_num] as int)%2 = 0 then 1 else 2 end
,case when cast([situs_num] as int)%2 = 0 then cast([situs_num] as int)
else -cast([situs_num] as int) end
或更简单(如Matt所建议)
order by
s.situs_street
,cast([situs_num] as int)%2 --ordered by return value 0's first(even) and 1's next (odd)
,case when cast([situs_num] as int)%2 = 0 then cast([situs_num] as int)
else -cast([situs_num] as int) end
答案 1 :(得分:0)
ORDER BY s.situs_street
,CASE WHEN [situs_num]%2 = 0 THEN situs_num ELSE 9999999 END ASC
,CASE WHEN [situs_num]%2 <> 0 THEN situs_num ELSE -1 END DESC
如果你可以在没有先铸造的情况下取出situs_num的剩余部分,那么它已经是数字的。如果不是,你将不得不按如下方式进行投射
ORDER BY s.situs_street
,CASE WHEN CAST([situs_num] AS INT)%2 = 0 THEN CAST([situs_num] AS INT) ELSE 9999999 END ASC
,CASE WHEN CAST([situs_num] AS INT)%2 <> 0 THEN CAST([situs_num] AS INT) ELSE -1 END DESC