Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql top x排序依据_Sql_Sql Server_Sql Order By - Fatal编程技术网

Sql top x排序依据

Sql top x排序依据,sql,sql-server,sql-order-by,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 specif

有人能帮我理解为什么它不起作用吗

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.
我在第一栏有这个ID:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
我需要的身份证是这样的:

15
14
13
12
11..
简单地说,你可以使用

SELECT TOP 10 * FROM dbticket ORDER BY 1 DESC

子查询不是必需的

这不起作用,因为有一个基本的t-SQL逻辑。T-SQL是一种基于集合的理论,我们所说的集合是指无序的唯一对象集合。所以FROM关键字在集合上起作用,但当我们添加orderby子句时,我们得到的不再是集合,而是我们可以称之为游标或更具体的“当前行集合”。 所以,这就解释了你的问题。。一旦添加order by 1 desc,select*from dbticket返回的任何数据都将转换为与from子句不兼容的游标

希望这有帮助

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

;with CTE as 
(
select row_number() over (order by id desc) as rownum, --order by the first column ex: id
name, id --select * columns 
from dbticket)
select Top 10 name , id from CTE --give names of all the columns you need
order by rownum asc;
检查示例代码

试试这个

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

当您在子查询中有order by时,必须在查询的select中使用Top选项。您可以在查询中使用Top 100%,使用order by选项从子查询中获取所有行

例如:

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


在派生表外部使用该order by。根据错误消息,您的子查询使用order by,而不在子查询本身中指定TOP。1的规程问题是什么?请看“除非”部分。因此,您可以使用SELECT TOP10*FROM SELECT TOP 100%FROM dbticket ORDER BY 1 DESCa@TimSchmelter-你可以,但这只是使警告静音,并且可能实际上不执行任何排序-因此您可以说您可以删除ORDER BY子句-它将具有相同的保证效果。如果您可以解释为什么您不只是使用select top10*from dbticket ORDER BY 1 desc,我们可能能够帮助您解决更多不起作用的问题:Msg 8155,级别16,状态2,第2行“a”的第1列未指定列名。即使是这样:从select*中选择top10*从dbticket order by id\u ticket desc FOR XML AUTO ayeah基于我给出的查询答案,但我们需要给出列名称,这是sql server首先执行前10名,然后按顺序执行的方式clause@RodolfoRollo-请参阅语句的逻辑处理顺序。第10步是订购。顶部是第11步。在您的解决方案中,外部子查询有什么用处?我相信整个场景没有给出jst要求的部分受到质疑。这是针对所问问题提供的解决方案,可能是您可以在何处使用条件,也可能是什么。但无论是在内部还是外部使用前10名,都没有区别。它按照我的要求运行,非常感谢
select * from
(select top 10 * from dbticket order by 1 desc ) a
select top 10 * from dbticket order by 1 desc