有人可以帮我理解为什么它不起作用吗?
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..
答案 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