按fleld1选择前n个顺序,然后按field2重新排序

时间:2017-07-11 21:22:09

标签: sql-server tsql sql-server-2016

我需要按订单号选择最近的100条记录(总共返回100条记录):

select top 100 orderNo, orderDate, orderTypeName, field1, field2, name, address
from orders
where dispatched = 1
order by orderNo desc

(orderNo是顺序的,最高的数字是最新的顺序)。

这让我获得了最近的100个订单。但我希望最新的100个订单对OrderTypeName进行排序,以便将每个OrderTypeName列在一起。

这适用于不需要选择前100条记录的其他查询 - 当然,如果我先对OrderTypeName进行排序,它会停止选择最近的100条记录。

我该怎么做?我尝试过搜索Google,但我甚至都不知道该搜索什么。 (我试过 - '选择前n'然后以结果为例 - 没有欢乐)。

感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用Row_Number并按以下顺序执行:

Select * from (
 Select orderNo, orderDate, orderTypeName, field1, field2, [name], [address],
    RowN=Row_Number() over (order by OrderNo desc)
 from orders
 where dispatched = 1
) a
Where a.RowN <= 100
order by OrderTypeName 

答案 1 :(得分:3)

将查询放入子查询中,然后添加ORDER BY orderTypeName

SELECT *
FROM (
    SELECT TOP(100)
        orderNo, orderDate, orderTypeName, field1, field2, name, address
    FROM orders
    WHERE dispatched = 1
    ORDER BY oderNo DESC
) t
ORDER BY orderTypeName, orderNo