【问题标题】:How to apply descending order in order by case?如何按大小写降序排列?
【发布时间】:2021-06-03 07:51:32
【问题描述】:

我有一个简单的表格,我想按特定规则对其进行排序。我想要的输出如下所示:

 PERSON_THIRD_BUF
 PERSON_TWO_BUF
 PERSON_TWO_BUF_11
 PERSON_TWO_BUF_10
 PERSON_TWO_BUF_9
 PERSON_TWO_BUF_8
 PERSON_TWO_BUF_7
 PERSON_TWO_BUF_6
 PERSON_TWO_BUF_5
 PERSON_TWO_BUF_4
 PERSON_TWO_BUF_3
 PERSON_TWO_BUF_2
 PERSON_TWO_BUF_1

所以PERSON_THIRD_BUF应该是第一个,PERSON_TWO_BUF应该是第二个,PERSON_TWO_BUF_*应该是降序排列:

我已经对PERSON_TWO_BUFPERSON_THIRD_BUF 进行了排序,但是我不知道如何按降序对PERSON_TWO_BUF_* 进行排序。

DECLARE @t table(col1 VARCHAR(50));


insert into @t 
values
( N'PERSON_TWO_BUF' ), 
( N'PERSON_THIRD_BUF' ), 
( N'PERSON_TWO_BUF_1' ), 
( N'PERSON_TWO_BUF_2' ), 
( N'PERSON_TWO_BUF_3' ), 
( N'PERSON_TWO_BUF_4' ), 
( N'PERSON_TWO_BUF_5' ), 
( N'PERSON_TWO_BUF_6' ), 
( N'PERSON_TWO_BUF_7' ), 
( N'PERSON_TWO_BUF_8' ), 
( N'PERSON_TWO_BUF_9' ), 
( N'PERSON_TWO_BUF_10' ), 
( N'PERSON_TWO_BUF_11' )

SELECT * FROM @t
ORDER BY CASE
      WHEN COL1 = 'PERSON_THIRD_BUF' THEN 0
    WHEN COL1 = 'PERSON_TWO_BUF' THEN 1
    WHEN COL1 LIKE 'PERSON_TWO_BUF_%' THEN 3
    END

任何帮助将不胜感激

【问题讨论】:

    标签: sql sql-server tsql sql-order-by


    【解决方案1】:

    一个可能的选项是以下ORDER BY 子句(基于问题的尝试):

    SELECT * FROM @t
    ORDER BY 
       CASE
          WHEN COL1 = 'PERSON_THIRD_BUF' THEN 0
          WHEN COL1 = 'PERSON_TWO_BUF' THEN 1
          WHEN COL1 LIKE 'PERSON_TWO_BUF_%' THEN 2
          ELSE 3
       END,
       TRY_CONVERT(int, REPLACE(col1, 'PERSON_TWO_BUF_', '')) DESC
    

    【讨论】:

    • 太棒了,我会在3分钟内接受它!谢谢!祝你今天过得愉快! :)
    • 我希望你永远不会有 PERSON_FOURTH_BUF
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2021-08-02
    • 2018-10-17
    • 2011-11-19
    • 1970-01-01
    相关资源
    最近更新 更多