我有一个问题:
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,答案是否会改变?
答案 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 by
,top
或offset
使用for xml
时会出现错误,除非它位于最外层的查询中。
ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效,除非还指定了TOP,OFFSET或FOR XML。
您可以使用select top 100 percent
在语义上解决该错误,但在另一个语句中调用该语句时,不会严格执行order by
。