【问题标题】:Reason alias works in ORDER BY but not in WHERE [duplicate]原因别名在 ORDER BY 中有效,但在 WHERE 中无效 [重复]
【发布时间】:2018-01-31 13:28:48
【问题描述】:

我知道I can't reference an alias in the WHERE clause,但这是为什么呢?是不是有不同的解释?

这样的事情会产生错误:

declare @myTable table 
(
    num numeric(5,2),
    den numeric(5,2)
)
insert into @mytable 
select 1, 2
union
select 1, 3
union
select 2, 3
union
select 2, 4
union
select 2, 5
union
select null, 1

select num/den as 'calc' from @myTable
where calc is not null
order by calc

但这会返回行:

declare @myTable table 
(
    num numeric(5,2),
    den numeric(5,2)
)
insert into @mytable 
select 1, 2
union
select 1, 3
union
select 2, 3
union
select 2, 4
union
select 2, 5
union
select null, 1

select num/den as 'calc' from @myTable
--where calc is not null
order by calc

【问题讨论】:

标签: tsql sql-server-2008-r2


【解决方案1】:

正如Cannot use Alias name in WHERE clause but can in ORDER BY中提到的,这是由于自然查询处理顺序:

  1. FROM
  2. ON
  3. OUTER
  4. WHERE
  5. GROUP BY
  6. CUBE | ROLLUP
  7. HAVING
  8. SELECT
  9. DISTINCT
  10. ORDER BY
  11. TOP

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-12
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2019-02-06
    • 2012-01-25
    • 2014-10-31
    相关资源
    最近更新 更多