TSQL动态排序值

时间:2017-06-14 14:31:47

标签: sql-server tsql sql-order-by

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

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

1 个答案:

答案 0 :(得分:4)

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

创建并填充示例数据(在将来的问题中将此步骤保存为我们)

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