繁体   English   中英

SQL Server排序奇数ASC和偶数DESC

[英]SQL Server sorting odd numbers ASC and even numbers DESC

我想知道SQL Server中是否有一种方法可以对包含varchar列中的数字的表进行排序。 我把数字(在我的案例中为House Numbers)转换为Int并使用

order by cast([sano]%2 as int), cast([sano] as Int)

实际上创造了2,4,6,8 ......,1,3,5,7,9等的输出。 但我需要得到像2,4,6,8..9,7,5,3,1这样的输出,所以即使是asc然后奇怪的是desc。

一个技巧是使用case表达式将奇数乘以-1 ,从而以递增的顺序首先获得具有最大绝对值的那些:

ORDER BY CAST([sano] % 2 AS INT), 
         CAST([sano] AS INT) * CASE CAST([sano] % 2 AS INT) WHEN 0 THEN 1 ELSE -1 END

假设门牌号有合理的上限,您可以使用以下内容:

declare @Samples as Table ( HouseNumber Int );
insert into @Samples ( HouseNumber ) values
  ( 1 ), ( 2 ), ( 3 ), ( 4 ), ( 5 ), ( 6 ), ( 7 ), ( 8 ), ( 9 );

select HouseNumber,
  case HouseNumber % 2 when 0 then HouseNumber else 1000000 - HouseNumber end as SortValue
  from @Samples
  order by case HouseNumber % 2 when 0 then HouseNumber else 1000000 - HouseNumber end;

对于偶数值,它使用门牌号码。 通过翻转奇数的符号,它们按相反的顺序排序,但需要偏移以使它们在偶数值之后排序。

这似乎有效,但我不知道为什么

select *
from test
order by CASE WHEN sano%2=0 THEN sano%2 END ASC

我正在测试和调查这种行为

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM