【问题标题】:Customised Ordering in SQLSQL 中的自定义排序
【发布时间】:2010-12-24 13:17:09
【问题描述】:

我有一个类似

的 SQL 查询
SELECT column1,column2 
FROM table1 
WHERE column1 IN('q1','q2','q3') 

结果按顺序显示:

q1
q2
q3

如果我将查询更改为

SELECT column1,column2 
FROM table1 
WHERE column1 IN('q3','q1','q2')

顺序还是一样。

如何在sql语句中实现这种排序?

救命!!

谢谢

【问题讨论】:

  • 根据您的问题,您似乎希望您的订单为 q3、q1、q2。该顺序是任意的,而不是计算机可以在没有额外信息的情况下得出的顺序,无论 SQL 是否可以为您完成。这是你的意思,还是你想要降序(q3,q2,q1)?
  • 您是在寻找实际的字母顺序(第一条语句),还是在寻找您的伪顺序(第二条语句)?第一个是通过以下几乎所有答案实现的。
  • 它实际上是伪排序...我从 C# 中实现的其他一些逻辑中得到排序

标签: sql sql-order-by


【解决方案1】:

是的。如果有某种方法可以ORDER 一个 SQL 结果BY 某事。

【讨论】:

  • 同学们,今天我们要学习SQL。好消息是,它主要是 select 语句。坏消息是,它主要是 select 语句....
【解决方案2】:

解决此问题的一种方法是在表中添加一个名为“SortOrder”的额外列,其中包含确定应以何种顺序返回行的整数。例如,您可以将 q3 的 SortOrder 设置为 1,将 q1 设置为 2,将 q2 设置为 3。您可以使用以下 SELECT 语句按您需要的顺序返回行:

SELECT column1,column2 
FROM table1 
WHERE column1 IN('q3','q1','q2')
ORDER BY SortOrder

【讨论】:

    【解决方案3】:

    您需要一个 ORDER BY 语句。这是控制结果集顺序的唯一方法

    【讨论】:

      【解决方案4】:

      您的 RDBMS 无法保证结果集将按 q1、q2、q3 排序。即使您的 in 子句是 in('q1', 'q2', 'q3')。如果您需要执行特定命令,请使用 order by:

      SELECT column1, column2 
        FROM table1 
       WHERE column1 IN('q1','q2','q3')
       ORDER BY column1
      

      另外,请务必包含您正在使用的 RDBMS。在某些情况下,它可能有助于回答问题。

      【讨论】:

        【解决方案5】:

        颠倒列的顺序

        SELECT column2, column1 
        FROM table1 WHERE column1 IN('q1','q2','q3') 
        

        对行进行排序,请添加 ORDER BY 子句:

        SELECT column1, column2 
        FROM table1 WHERE column1 IN('q1','q2','q3') 
        ORDER BY column1 DESC
        

        您可以按任何列排序,并且可以将其设置为升序 (ASC) 或降序 (DESC)。

        您甚至可以按多列排序:

        SELECT column1, column2 
        FROM table1 WHERE column1 IN('q1','q2','q3') 
        ORDER BY column1 DESC, column2 ASC
        

        这将根据column1 按降序排序,并使用column2 打破平局。

        【讨论】:

          【解决方案6】:

          ORDER BY 子句会有所帮助;但是 q1, q2, q3 或必须能够按字母顺序进行逻辑排序,或者如果将它们按最早到最晚的日期排序。看起来像这样:

          SELECT column1,column2 
          FROM table1 
          WHERE column1 IN('q1','q2','q3') 
          ORDER BY column1 ASC
          

          ' 或者 DESC 如果你想反过来 '你也可以参考它的位置而不是它的实际名称来寻址列,如下所示:

          SELECT column1,column2 
          FROM table1 
          WHERE column1 IN('q1','q2','q3') 
          ORDER BY 1 ASC
          

          【讨论】:

            猜你喜欢
            • 2014-06-30
            • 2019-12-06
            • 2014-04-29
            • 1970-01-01
            • 1970-01-01
            • 2021-07-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多