[英]SQL Server, sort on two columns,first asc sort,second asc or desc based on the first odd-even
[英]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.