私はこのクエリを持っています:
Select (Country.Name + ', ' + City.Name) as Location
...
Where Location like '%Punta Cana%'
'where'なしで動作するので、私は素朴にそれが動作する可能性があると思いました。そうではなく、エラーをスローします:無効な列名'場所'。なぜそれが機能しないのか、そしてどのような代替手段が機能するのかを説明する時間がありますか?
私はこのクエリを持っています:
Select (Country.Name + ', ' + City.Name) as Location
...
Where Location like '%Punta Cana%'
'where'なしで動作するので、私は素朴にそれが動作する可能性があると思いました。そうではなく、エラーをスローします:無効な列名'場所'。なぜそれが機能しないのか、そしてどのような代替手段が機能するのかを説明する時間がありますか?
いいえ、クエリ内の他の場所で列エイリアスを参照することはできませんORDER BY
。これは、クエリ内の句がSQLServerによって論理的に解析される方法のためです-SELECT
最後から2番目です。(dba.SEでこれについて多くの興味深い議論があります。)
オプションは、式を繰り返すか、サブクエリ/CTEを使用することです。サブクエリ/CTEの例はすでにあるので、完全を期すために、次のこともできます。
Select (Country.Name + ', ' + City.Name) as Location
...
Where (Country.Name + ', ' + City.Name) like '%Punta Cana%'
私は昨日、この同じ質問に答えました。これには、式を繰り返すことは思ったほど高価ではないことを証明することも含まれます。
代わりにこのアプローチを使用してください。
; with temp as (
Select (Country.Name + ', ' + City.Name) as Location
...
)
select * from temp
Where Location like '%Punta Cana%'
でエイリアスを使用する場合は、全体を別のエイリアスでORDER BY
ラップできます。SELECT
SELECT
SELECT *
FROM
(
Select (Country.Name + ', ' + City.Name) as Location
...
) x
Where x.Location like '%Punta Cana%'
ORDER BY
それ以外の場合は、句で式を再度使用する必要があります
場所は列名ではありません。作成しているのは単なるエイリアスです。