SQL 服务器中的 OrderBy 自定义 "max" 整数

OrderBy in SQL Server with custom "max" integer

我在 SQL 服务器中有 table,其中包含一个整数排序列。列中的所有值都是正数。我想对 table 进行排序,这样我选择了一个 "max" 值(例如 3),并且返回的所有值都相对于 3 递减。"descending" 顺序实际上并不重要,只要因为列出了数据库中的每个项目。

数据库示例:

Value SortColumn
A     1
B     5
C     4
D     3
E     0
F     2

期望的输出(3 为 "max"):

Value SortColumn
D        3
C        4
B        5
E        0
A        1
F        2

看来这个similar post方向可能是对的,但不是我想要的....

我想你想要:

order by abs(sortcolumn - 3) asc

您可以使用 CASE 表达式:

SELECT
    Value, SortColumn
FROM yourTable
ORDER BY
    CASE WHEN SortColumn = 3 THEN 0 ELSE 1 END,
    SortColumn DESC

我已经测试了 Tim 和 Gordon 的解决方案,但结果与您想要的不匹配。

虽然我的解决方案很长。看看:

DECLARE @table TABLE (Value CHAR,SortColumn INT)
INSERT INTO @table VALUES ('A',1),('B',5),('C',4),('D',3),('E',0),('F',2)

DECLARE @max INT=3;

;WITH CTE AS(
SELECT 1-ROW_NUMBER() OVER (ORDER BY SortColumn DESC) RN, * FROM @table WHERE SortColumn >=@max 
UNION
SELECT ROW_NUMBER() OVER (ORDER BY SortColumn) RN,* FROM @table WHERE SortColumn <@max
)
SELECT Value,SortColumn FROM CTE ORDER BY RN

输出为:

您想对大于 3 的数字进行升序排序,然后对小于 3 的数字进行升序排序。所以这样做:

SELECT 
   -- blah
ORDER BY CASE WHEN SortColumn >= 3 THEN 1 ELSE 0 DESC, SortColumn ASC