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) 到最高正数浮点数排序数据类型值。
ABS() 没有解决这个问题,因为中间出现了一些正数。
我试图添加一个 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
我有一个动态查询,其中包含随时间动态排序的过滤器,它会按值创建产品项目的降序排序顺序,这在大多数情况下是预期的。:
ROW_NUMBER() OVER (PARTITION BY T.Time_Calculation ORDER BY SUM(T.[Displayed Value 1]) DESC) +2 end AS DisplayItem_SortOrder
现在问题来了:我有一个数据集类型(这是由 WHERE 子句中的一个字段设置的),其中也有负数,在这种情况下,我需要从最高负数 (ASC) 到最高正数浮点数排序数据类型值。
ABS() 没有解决这个问题,因为中间出现了一些正数。
我试图添加一个 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