0

有人可以向我解释为什么使用 SQL Server 可以做到这一点:

select column1 c,column2 d
from table1
order by c,column3

我可以使用别名按 column1 排序,因为 order by 子句在 select 子句之后应用,但是如何按我没有检索的列排序?

提前致谢。

4

3 回答 3

2

FROM 子句中对象的所有列名都可用于 ORDER BY,除非是 GROUPing 或 DISTINCT。正如您所指出的,别名也是可用的,因为 SELECT 语句在 ORDER BY 之前处理。

这是您信任优化器的情况之一。

于 2013-10-17T17:37:25.500 回答
1

根据在线图书(http://technet.microsoft.com/en-us/library/ms188385(v=sql.90).aspx

ORDER BY 子句可以包括未出现在选择列表中的项目。但是,如果指定了 SELECT DISTINCT,或者如果语句包含 GROUP BY 子句,或者如果 SELECT 语句包含 UNION 运算符,则排序列必须出现在选择列表中。

此外,当 SELECT 语句包含 UNION 运算符时,列名或列别名必须是第一个选择列表中指定的那些。

于 2013-10-17T17:35:56.090 回答
0

您可以按您在选择中定义的别名排序,select column1 c然后告诉它按您不包括在选择中但仍存在于表中的列排序。这允许我们按数据的表达式排序,而不必在选择中包含它。

Select cost, tax From table ORDER BY (cost*tax)
于 2013-10-17T17:37:17.740 回答