订购sql查询结果

use*_*409 2 sql sql-server sql-server-2005

我的SQL查询给出了列:

  • product_id (这是一个整数)
  • pnl (浮动 - 可以是负数)

我得到超过100行.

我想基于abs(pnl)过滤掉前40行.但结果应仅由pnl列排序,而不是由abs(pnl)排序.

我想为MSSQL 2005做这个.

有没有办法做到这一点?

mar*_*c_s 7

您不能在一个步骤/法规中执行此操作.该TOP x选择将始终本着对ORDER BY排序指令.您无法根据ABS(pnl)其他内容同时选择TOP 40 .

您需要做的是一个两步过程 - 使用CTE(公用表表达式)或临时表 - 首先选择排序的前40行ABS(pnl),然后按顺序排序结果集pnl.

就像是:

WITH Top40Rows AS
(
   SELECT TOP 40 product_id, pnl
   ORDER BY ABS(pnl)
)
SELECT product_id, pnl
FROM Top40Rows
ORDER BY pnl
Run Code Online (Sandbox Code Playgroud)