在MS SQL Server 2008 R2中编写存储过程,我想避免使用DSQL ...

我希望有条件的排序方法(ASC或DESC)。

现在,使用一个数字列,我将只使用一个case语句并取反该值以模拟ASC或DESC ...
那是:

... ORDER BY CASE @OrderAscOrDesc WHEN 0 THEN [NumericColumn] ELSE -[NumericColumn] END ASC


用alpha列执行此操作的合适方法是什么?

编辑:我想到了一个聪明的方法,但效率似乎很低...我可以将有序的alpha列插入具有自动编号的临时表中,然后使用上述方法按自动编号进行排序。

编辑2:

你们如何看待这种方法?

ORDER BY CASE @OrderAscOrDesc WHEN 0 THEN [AlphaColumn] ELSE '' END ASC,
CASE @OrderAscOrDesc WHEN 0 THEN '' ELSE [AlphaColumn] END DESC


我不知道强制统一列上的排序是否比从排序后的字符串中得出数字更有效

最佳答案

一种选择

;WITH cQuery AS
(
   SELECT
       *,
       ROW_NUMBER() OVER (ORDER BY SortColumn) AS RowNum
   FROM
       MyTable
)
SELECT
   *
FROM
   cQuery
ORDER BY
   RowNum * @Direction --1 = ASC or -1 = DESC


或IMHO有点丑的情况

ORDER BY
  CASE WHEN 'ASC' THEN SortColumn ELSE '' END ASC,
  CASE WHEN 'DESC' THEN SortColumn ELSE '' END DESC

关于sql-server - Alpha列的条件SQL ORDER BY ASC/DESC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3884884/

10-12 16:44