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