我有这个问题:
Select (Country.Name + ', ' + City.Name) as Location
...
Where Location like '%Punta Cana%'
因为它没有“我在哪里”,我天真地认为它可以正常工作。好吧,它没有并抛出错误:无效的列名称'位置'。有没有人有时间请解释为什么它不起作用,什么是可行的替代方案?
答案 0 :(得分:4)
不,除了ORDER BY
之外,您无法在查询中的任何其他位置引用列别名。这是因为SQL Server对查询中的子句进行逻辑解析的方式 - SELECT
是倒数第二。 (Lots of interesting discussion about this over on dba.SE。)
您的选择是重复表达式或使用子查询/ CTE。已经有子查询/ CTE的例子,所以为了完整性,你也可以这样做:
Select (Country.Name + ', ' + City.Name) as Location
...
Where (Country.Name + ', ' + City.Name) like '%Punta Cana%'
昨天我刚回答了同样的问题,包括证明重复表达并不像听起来那么昂贵:
答案 1 :(得分:3)
请改用此方法:
; with temp as (
Select (Country.Name + ', ' + City.Name) as Location
...
)
select * from temp
Where Location like '%Punta Cana%'
答案 2 :(得分:1)
如果您想在ORDER BY
中使用别名,可以将整个SELECT
包裹在另一个SELECT
内
SELECT *
FROM
(
Select (Country.Name + ', ' + City.Name) as Location
...
) x
Where x.Location like '%Punta Cana%'
否则,您必须在ORDER BY
子句
答案 3 :(得分:0)
位置不是列名。它只是你正在创建的别名。