SQL:按列排序,然后按子串混合asc和desc
示例:在我的仓库中,我有行,每行有5个货架。SQL:按列排序,然后按子串混合asc和desc
我正在走过走道,第一排到我的右侧,第二排到我的左侧,我开始从第一排从第一排到第五排,然后我从第五排到第五排。
我有一列的数据库如下:
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
的前两个字母是行和下一个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。
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
很棒的回答!现在我将如何处理,如果我有结果跳过一排(01之后我有03,所以没有项目从第2行中选择),因此01-005-A-03之后我想要03-005-A-03这意味着在此我想要第3行DESC和第4行ASC? – Harry
你可以请问这个新的问题,我不能理解你的意见 – TheGameiswar
我建议询问一个新的问题以及预期的输出基于 – TheGameiswar
什么比第二和第一其它行的休息吗? – TheGameiswar
同样的东西,基本上每个奇数行都是ASC,每个偶数都是DESC。谢谢 – Harry
首先规范你的模式。这意味着一列行,一列货架和一列剩下的东西。 MOD()将解决其余的问题。并找出你正在使用的RDBMS。 – Strawberry