Select 前 n 个按 feld1 排序,然后按 field2 重新排序
Select top n order by fleld1, then re-order by field2
我需要select按订单号查询最近的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 列在一起。
这适用于不需要 select 前 100 条记录的其他查询 - 但当然在这里,如果我首先对 OrderTypeName 进行排序,它会停止 select 最近的 100 条记录。
我该怎么做?我试过搜索 Google 但我什至不知道要搜索什么。 (我试过 - 'select top n' 然后求助于结果 - 不开心)。
谢谢。
您可以使用 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
将查询放在子查询中,然后添加 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
我需要select按订单号查询最近的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 列在一起。
这适用于不需要 select 前 100 条记录的其他查询 - 但当然在这里,如果我首先对 OrderTypeName 进行排序,它会停止 select 最近的 100 条记录。
我该怎么做?我试过搜索 Google 但我什至不知道要搜索什么。 (我试过 - 'select top n' 然后求助于结果 - 不开心)。
谢谢。
您可以使用 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
将查询放在子查询中,然后添加 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