理论上,SQL Server 中的每条语句都会创建传递给下一条语句的虚拟表。换句话说,当完成 FROM 和 Where 子句后,下一步是从之前创建的虚拟组中选择列。
但是,可以按选择列表中未列出的列对结果集进行排序。
当 SELECT 子句在 ORDER BY 之前执行并且哪个主要任务是选择要呈现的列时,这怎么可能?
这有点令人困惑,或者我没有得到一些东西。
这并不总是可能的:
如果指定了 DISTINCT,则 ORDER BY 子句中的表达式只能访问上一步返回的虚拟表(VT5)
(VT5 是由 生成的返回的虚拟表SELECT)
如果未指定 DISTINCT ,则 ORDER BY 子句中的表达式可以访问 SELECT 阶段的输入和输出虚拟表。
解释取自“Inside SQLServer 2008 T-SQL Querying” ——我不确定这一特定章节是否在线可用(第 6 步:演示ORDER BY阶段,第 16 页。)
因此,
SELECT distinct field2 FROM table1 order by field1
Run Code Online (Sandbox Code Playgroud)
给出一个错误:
如果指定了 SELECT DISTINCT ,消息 145,级别 15,状态 1,第 1 行ORDER BY 项必须出现在选择列表中。
| 归档时间: |
|
| 查看次数: |
40598 次 |
| 最近记录: |