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