Sql top x order by

时间:2014-06-25 09:37:06

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

有人可以帮我理解为什么它不起作用吗?

select top(10) * from
(select * from dbticket order by 1 desc ) a

错误是:

The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified.

我在第1栏中有这个ID:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

我需要这样的ID:

15
14
13
12
11..

5 个答案:

答案 0 :(得分:1)

只需使用

即可
SELECT TOP 10 * FROM dbticket ORDER BY 1 DESC

不需要子查询。

答案 1 :(得分:1)

由于基本的T-SQL逻辑,这不起作用。 T-SQL是基于集合的理论,通过SET我们指的是unordered个唯一的对象集合。因此,FROM关键字适用于Sets但是当我们添加Order By条款时,我们得到的不再是set,而是我们可以称之为CURSOR或更具有特色的'CURrent Set Of Rows'。 因此,这解释了您的问题..一旦您添加order by 1 desc select * from dbticket返回的任何数据SET被转换为Cursor,这与{{1}不兼容}。

希望这会有所帮助!!

要获得所需的结果,请写为:

FROM Clause

检查示例代码here.

答案 2 :(得分:0)

select top(10) * from
(select * from dbticket order by 1 desc FOR XML AUTO) a

答案 3 :(得分:0)

试试这个

select * from
(select top(10)  * from dbticket order by 1 desc ) a

答案 4 :(得分:0)

如果您有订单,则子查询必须在选择您的查询时使用Top选项。您可以在查询中使用Top 100 Percent来按顺序获取子查询中的所有行。

例如:

select top(10) * from
(select top 100 Percent * from dbticket order by 1 desc ) a

在您的示例中,您可以使用以下查询:

select * from
(select top 10 * from dbticket order by 1 desc ) a

OR

select top 10 * from dbticket order by 1 desc