在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/