有人可以向我解释为什么使用 SQL Server 可以做到这一点:
select column1 c,column2 d
from table1
order by c,column3
我可以使用别名按 column1 排序,因为 order by 子句在 select 子句之后应用,但是如何按我没有检索的列排序?
提前致谢。
有人可以向我解释为什么使用 SQL Server 可以做到这一点:
select column1 c,column2 d
from table1
order by c,column3
我可以使用别名按 column1 排序,因为 order by 子句在 select 子句之后应用,但是如何按我没有检索的列排序?
提前致谢。
FROM 子句中对象的所有列名都可用于 ORDER BY,除非是 GROUPing 或 DISTINCT。正如您所指出的,别名也是可用的,因为 SELECT 语句在 ORDER BY 之前处理。
这是您信任优化器的情况之一。
根据在线图书(http://technet.microsoft.com/en-us/library/ms188385(v=sql.90).aspx)
ORDER BY 子句可以包括未出现在选择列表中的项目。但是,如果指定了 SELECT DISTINCT,或者如果语句包含 GROUP BY 子句,或者如果 SELECT 语句包含 UNION 运算符,则排序列必须出现在选择列表中。
此外,当 SELECT 语句包含 UNION 运算符时,列名或列别名必须是第一个选择列表中指定的那些。
您可以按您在选择中定义的别名排序,select column1 c
然后告诉它按您不包括在选择中但仍存在于表中的列排序。这允许我们按数据的表达式排序,而不必在选择中包含它。
Select cost, tax From table ORDER BY (cost*tax)