SQL:按列排序,然后通过子串混合asc和desc

时间:2016-07-31 06:46:10

标签: mysql sql-server

示例:在我的仓库中,我有行,每行有5个货架。

我正走过过道,右边是第1排,左边是第2排,我从第1行开始从1到5选择订单,然后从第5行到第5行从第5行开始。

我在数据库中有一列如下:

01-001-A-01
01-002-A-02
01-003-A-03
01-004-A-01
01-005-A-03
02-001-A-01
02-002-A-02
02-003-A-03
02-004-A-01
02-005-A-03

前2个字母是行,接下来的3个字母是货架,我想实现第二行应该是DESC顺序,而第一行(和第三个等)应该是ASC顺序。如下:

01-001-A-01  
01-002-A-02  
01-003-A-03  
01-004-A-01  
01-005-A-03  
02-005-A-03  
02-004-A-01  
02-003-A-03  
02-002-A-02  
02-001-A-01 

所以基本上每个奇数行都是ASC,每个甚至都是DESC。

1 个答案:

答案 0 :(得分:1)

Demo Here

select *
from #temp
order
by substring(id,1,2),
case
when substring(id,1,2)%2=0 then row_number() over (partition by substring(id,1,2) order by  SUBSTRING(id,4,3) desc)
else row_number() over (partition by substring(id,1,2) order by  SUBSTRING(id,4,3) asc)
end