提问



我试图在SQL中按多个列排序,并在不同的方向。 column1将按降序排序,column2按升序排序。


我怎样才能做到这一点?

最佳参考


ORDER BY column1 DESC, column2


首先按column1(递减)对所有内容进行排序,然后每当两行或多行的column1字段相等时按column2(升序,这是默认值)对所有内容进行排序。

其它参考1


其他答案缺乏具体的例子,所以在这里:


给出以下表:


 FirstName |  LastName   |  YearOfBirth
----------------------------------------
  Thomas   | Alva Edison |   1847
  Benjamin | Franklin    |   1706
  Thomas   | More        |   1478
  Thomas   | Jefferson   |   1826


如果您执行以下查询:


SELECT * FROM People ORDER BY FirstName DESC, YearOfBirth ASC


结果集如下所示:


 FirstName |  LastName   |  YearOfBirth
----------------------------------------
  Thomas   | More        |   1478
  Thomas   | Jefferson   |   1826
  Thomas   | Alva Edison |   1847
  Benjamin | Franklin    |   1706

其它参考2


SELECT  *
FROM    mytable
ORDER BY
        column1 DESC, column2 ASC

其它参考3


多列排序取决于列的相应值:
这是我的表示例,其中有两列以Alphabets和Numbers命名,这两列中的值是 asc 和 desc 订单。


[11]


现在我通过执行以下命令在这两列中执行 Order By :


[12]


现在我再次在这两列中插入新值,其中Alphabet值在 ASC 顺序中:


[13]


并且Example表中的列看起来像这样。
现在再次执行相同的操作:


[14]


您可以看到第一列中的值是按顺序排列,但第二列不是ASC顺序。

其它参考4


您可以在多个条件下使用多个排序,


ORDER BY 
     (CASE 
        WHEN @AlphabetBy = 2  THEN [Drug Name]
      END) ASC,
    CASE 
        WHEN @TopBy = 1  THEN [Rx Count]
        WHEN @TopBy = 2  THEN [Cost]
        WHEN @TopBy = 3  THEN [Revenue]
    END DESC