【问题标题】:SQL Query - how do I order part of my data in alphabetical order, and part by idSQL 查询 - 如何按字母顺序排列部分数据,并按 id 排列部分数据
【发布时间】:2019-11-15 00:34:21
【问题描述】:

我有一小段数据(15 条记录),其中一部分我想按字母顺序排序,一部分按 ID 排序

图 1 以原始顺序显示我的数据

查询完SELECT * FROM tableName ORDER BY code;

图 2 现在按字母顺序显示我的数据,这很好,但是我希望前 2 条记录按 id 排序

图 3 显示了我希望我的数据的外观

有人可以帮我解答一下吗?

【问题讨论】:

  • 您是否有机会尝试按第一秒的字母顺序对行进行排序,然后是 ID?
  • 抱歉,我现在按照建议添加了标签。我正在使用 Microsoft SQL Server Management Studio。并且没有LUX-INTLUX-CONT 不需要按字母顺序排序,只需按ID 排序

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


【解决方案1】:

我会这样写:

order by (case when code in ('LUX-INT', 'LUX-CONT') then 1 else 2 end),   -- put the special codes first
         (case when code in ('LUX-INT', 'LUX-CONT') then code end),       -- order them alphabetically
         id                                                               -- order the rest by id

无论底层列的类型和排序规则如何,这都有效。

【讨论】:

    【解决方案2】:

    我假设id 是一个整数。您可以在ORDER BY 子句中使用条件CASE

    注意第一个表达式case when code in ('LUX-INT', 'LUX-CONT') then -id end desc,它将返回idNULL。由于NULL 将在ORDER BY 中排在第一位,因此我使用DESC 并否定id 值,以便id 按升序排列

    order by case when code in ('LUX-INT', 'LUX-CONT') then -id end desc, code
    

    【讨论】:

      【解决方案3】:

      用例当

      SELECT * FROM tableName ORDER BY case when code in ('LUX INT','LUX-CONT') then id else code end
      

      【讨论】:

      • 除非id是字符串数据类型否则会出现转换错误
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多