SQL - 您是否必须在外部查询中重复ORDER BY?

时间:2017-04-07 13:21:34

标签: sql sql-order-by inner-query

我有一个问题:

select   t1.*
from     t1
order by t1.date

此查询包含在另一个查询中:

select * from (select   t1.*
               from     t1
               order by t1.date) t2

您是否必须在外部查询中重复ORDER BY?像这样:

select * from (select   t1.*
               from     t1
               order by t1.date) t2 order by t2.date

如果将内部查询移动到CTE,答案是否会改变?

4 个答案:

答案 0 :(得分:1)

是的,如果要对输出进行排序,则必须在外部查询中重复排序。

SQLserver仅在外部查询中遵循顺序,而您的内部顺序是无意义的

答案 1 :(得分:0)

外部查询可能会更改内部查询提供的结果的顺序。因此,您也需要在外部查询上使用order。 但是,不需要使用ininner查询提供的示例查询。

答案 2 :(得分:0)

您不需要在两个查询中重复订单。您应该在外部查询中使用Order By。如下所示:

Select * From (Select   t1.* From  t1) t2 
Order By t2.date

答案 3 :(得分:0)

在SQL Server中,尝试在order bytopoffset使用for xml时会出现错误,除非它位于最外层的查询中。

  

ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效,除非还指定了TOP,OFFSET或FOR XML。

您可以使用select top 100 percent在语义上解决该错误,但在另一个语句中调用该语句时,不会严格执行order by