【问题标题】:Why do I get an "Invalid column name"? Msg 207 Level 16 State 1 Line 14为什么我会收到“无效的列名”?消息 207 级别 16 状态 1 第 14 行
【发布时间】:2020-11-12 17:11:36
【问题描述】:

当我在 where 子句中使用别名引用时,为什么会收到“无效的列名”错误 Msg 207 Level 16 State 1 Line 14? 创建表临时 ( col1 nvarchar(25), col2 nvarchar(25) )

insert into  temp
values ('Babahoyo', 'Ecuador'),
       ('Stavanger', 'Norway'),
       ('Seattle', 'USA'),
       ('New York City', 'USA')

select 
    row_number() over (order by col2) as N, 
    col1, col2
from
    temp
where 
    n = 2

db Fiddle

【问题讨论】:

标签: sql sql-server tsql


【解决方案1】:

您不能将an alias reference 放入where clause

select * from
(
select row_number() OVER (ORDER BY col2) as N, col1, col2
from temp
)A
where n = 2

【讨论】:

  • @user716255,你可以试试我给出的答案——使用子查询
  • 更准确地说,您不能在 where 子句中使用来自同一“范围”的 column 别名引用。 table 别名是不同的,如代码所示,来自嵌套范围(无论是子查询还是 CTE)的列别名都是有效的。
【解决方案2】:

使用offset/fetch:

select t.*
from temp
order by col2
offset 1 row fetch 1 row only

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2012-03-26
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多