Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 在子查询中按顺序排序_Sql_Sql Server_Sql Server 2005_View_Sql Order By - Fatal编程技术网

Sql 在子查询中按顺序排序

Sql 在子查询中按顺序排序,sql,sql-server,sql-server-2005,view,sql-order-by,Sql,Sql Server,Sql Server 2005,View,Sql Order By,我想做的是通过works订购。但是在视图中不可能有一个命令。如果不在视图中,如何执行此命令 SQL响应: Msg 1033,15级,状态1,第5行ORDER BY子句在中无效 视图、内联函数、派生表、子查询和公共表 表达式,除非还指定了TOP或FOR XML 你不能。只有最外层的秩序由物质决定 因此,SELECT*FROM MyView ORDER By which是唯一的方法 忽略任何中间顺序(无论是按顺序还是巧合,或lan的一部分)这里有两个问题 1-您的排序依据是毫无意义的。当您在子查询中

我想做的是通过works订购。但是在视图中不可能有一个命令。如果不在视图中,如何执行此命令

SQL响应:

Msg 1033,15级,状态1,第5行ORDER BY子句在中无效 视图、内联函数、派生表、子查询和公共表 表达式,除非还指定了TOP或FOR XML

你不能。只有最外层的秩序由物质决定

因此,
SELECT*FROM MyView ORDER By which
是唯一的方法


忽略任何中间顺序(无论是按顺序还是巧合,或lan的一部分)

这里有两个问题

1-您的
排序依据
是毫无意义的。
当您在子查询中使用
时,
排序
是不相关的


2-视图的
orderby
应该在调用查询中,而不是在视图本身中。

无需在子查询中使用
orderby

如果要在视图中添加一个
orderby
,可以在视图中添加一个
TOP(100)
,然后使用它


我与前面的答案一致认为,在子查询中按
排序通常不是一个好主意。然而,我发现这样做有时非常有用。我假设普林格辛恩的问题中的示例查询是一个更复杂需求的简单示例。您可以通过以下方式在子查询中按进行排序:

SELECT u.id
FROM user u
WHERE u.id IN 
((SELECT l.id FROM location l WHERE l.id = ?id ORDER BY l.idLocation DESC )) 
但是,您会注意到WHERE子句不再使用“IN”运算符。相反,您必须使用“EXISTS”并执行相关子查询。或者你可以这样做:

SELECT u.id
FROM user u
WHERE exists
(SELECT ROW_NUMBER() OVER (ORDER BY l.idLocation DESC) FROM location l WHERE u.id = l.id and l.id = ?id) 
致以最良好的祝愿,
James

你是指子查询吗?我在这里看不到任何视图。我看不到按工作的
订单将如何对输出产生任何影响。你能给我们举个例子,说明你现在得到了什么样的产出,以及你希望它有什么不同吗?在
语句中的
ORDER BY
即使“起作用”也不太重要,因此您将得到一些困惑的答案。+1@ChrisCunningham-OP,从原始查询中不清楚您希望结果的顺序,因为您只是检查u.id是否在子选择的结果中。谢谢。可怜的我,我必须找到另一种方法来做这件事。@pringlesinn-做什么?-这是目前最大的谜团。如果我有一个文章表,我需要按A-Z或Z-A顺序显示它们,但我也希望一次选择100篇。按外部订单订购仅适用于选定的100。怎么做到这一点?这是不正确的。许多情况下,内部的按排序会带来好处。分页查询是一个常见的例子。子查询内的排序获取在表范围内排序的行。最外层的ORDER BY orders仅在最终结果的范围内。如gbn所述,
ORDER BY
在内部查询中被忽略。我检查了这两个代码片段的执行计划,
orderby
似乎被删除了。然而,我记得,在更复杂的情况下使用上述方法是完成任务的最佳方式。祝你好运
SELECT u.id
FROM user u inner join 
  (
    SELECT ROW_NUMBER() OVER (ORDER BY l.idLocation DESC) as rowid, l.id 
    FROM location l 
    WHERE l.id = ?id
  ) as z on z.id = u.id