基于具有奇数或偶数值的一列的Sql排序脚本

问题描述 投票:0回答:1

我需要帮助设计一个 sql 脚本,该脚本将根据列值对托架项目进行排序。如果 level 列值为偶数,则 bay 上升,但如果 level 列为奇数,则 bay 下降。我有 12 个级别,每个级别有 54 个隔间。因此,缩短示例(忽略级别编号后的点)

Level  Bay
    1    5
    1    4
    1   54
    1   13
    2    8
    2    3
    2    4

结果

Level  Bay
    1    4
    1    5
    1   13
    1   54
    2    8
    2    4
    2    3

这是脚本,因为它在将 varchar 级别转换为 int 时给出转换失败错误。

SELECT cast (SUBSTRING(cm.description, CHARINDEX('Bay:', cm.description) + 4, CHARINDEX(' ', cm.description, CHARINDEX('Bay:', cm.description)) - CHARINDEX('Bay:', cm.description) - 4) AS INT)      AS Bay,
       cast (SUBSTRING(cm.description, CHARINDEX('Level:', cm.description) + 6, CHARINDEX(' ', cm.description, CHARINDEX('Level:', cm.description)) - CHARINDEX('Level:', cm.description) - 6)AS INT) AS level
FROM   [Test].[Test].[Stations] AS cm
WHERE  ( cm.StationTypeId = '1' )
ORDER  BY CASE 'level' % 2
            WHEN 0 THEN 'bay'
            WHEN 1 THEN '-bay'
          END; 

这是每个级别的描述栏:

Aisle:1 Bay:1 Level:1 Side:E
sql sql-server sql-scripts
1个回答
0
投票
order by
    level,
    case level % 2
        when 0 then -bay
        when 1 then  bay
    end
© www.soinside.com 2019 - 2024. All rights reserved.