use*_*409 2 sql sql-server sql-server-2005
我的SQL查询给出了列:
product_id (这是一个整数) pnl (浮动 - 可以是负数)我得到超过100行.
我想基于abs(pnl)过滤掉前40行.但结果应仅由pnl列排序,而不是由abs(pnl)排序.
我想为MSSQL 2005做这个.
有没有办法做到这一点?
您不能在一个步骤/法规中执行此操作.该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)
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |