1

我有一个查询:

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

4 回答 4

1

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

SQLserver 仅在外部查询中遵循 order by,而您的内部 order by 毫无意义

于 2017-04-07T13:22:58.297 回答
0

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

于 2017-04-07T13:24:30.000 回答
0

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

Select * From (Select   t1.* From  t1) t2 
Order By t2.date
于 2017-04-07T13:24:43.880 回答
0

在 SQL Server 中,如果order by不使用top,offsetfor xml除非它位于最外层查询中,否则会出现错误。

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

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

于 2017-04-07T13:25:55.107 回答