TSQL 值的动态排序

TSQL Dynamic ordering of values

我有一个动态查询,其中包含随时间动态排序的过滤器,它会按值创建产品项目的降序排序顺序,这在大多数情况下是预期的。:

ROW_NUMBER() OVER (PARTITION BY T.Time_Calculation ORDER BY SUM(T.[Displayed Value 1]) DESC) +2 end AS DisplayItem_SortOrder

现在问题来了:我有一个数据集类型(这是由 WHERE 子句中的一个字段设置的),其中也有负数,在这种情况下,我需要从最高负数 (ASC) 到最高正数浮点数排序数据类型值。

A​​BS() 没有解决这个问题,因为中间出现了一些正数。 我试图添加一个 CASE 语句,但似乎 "ASC" 和 "DESC" 不是可以在同一语句中添加的东西。 如有任何建议,我们将不胜感激。

Display Name    DisplayItem_SortOrder   Displayed Value 1
Product1    3   -31454.61396
Product10   4   -3407.16712
Product2    5   -708.9942251
Product3    6   123.5454381
Product6    7   428.6027531
Product5    8   454.4814295
Product4    9   454.9838374
Product9    10  455.54
Product8    11  471.54

我想你正在寻找这样的东西:

创建并填充样本数据(在您以后的问题中省去这一步)

DECLARE @T AS Table
(
    col int
)

INSERT INTO @T VALUES
(1), (2), (3), (4), (-1), (-2), (-3), (5)

查询:

SELECT col
FROM @T
ORDER BY CASE WHEN col < 0 THEN 0 ELSE 1 END, 
         ABS(col)

结果:

col
-1
-2
-3
1
2
3
4
5