0

私はこのクエリを持っています:

Select (Country.Name + ', ' + City.Name) as Location
...
Where Location like '%Punta Cana%'

'where'なしで動作するので、私は素朴にそれが動作する可能性があると思いました。そうではなく、エラーをスローします:無効な列名'場所'。なぜそれが機能しないのか、そしてどのような代替手段が機能するのかを説明する時間がありますか?

4

4 に答える 4

4

いいえ、クエリ内の他の場所で列エイリアスを参照することはできませんORDER BY。これは、クエリ内の句がSQLServerによって論理的に解析される方法のためです-SELECT最後から2番目です。(dba.SEでこれについて多くの興味深い議論があります。)

オプションは、式を繰り返すか、サブクエリ/CTEを使用することです。サブクエリ/CTEの例はすでにあるので、完全を期すために、次のこともできます。

Select (Country.Name + ', ' + City.Name) as Location
...
Where (Country.Name + ', ' + City.Name) like '%Punta Cana%'

私は昨日、この同じ質問に答えました。これには、式を繰り返すことは思ったほど高価ではないことを証明することも含まれます。

WHERE句の参照エイリアス(SELECTで計算)

于 2012-06-26T13:45:28.070 に答える
3

代わりにこのアプローチを使用してください。

; with temp as (
Select (Country.Name + ', ' + City.Name) as Location
...
)
select * from temp
Where Location like '%Punta Cana%'
于 2012-06-26T13:41:31.967 に答える
1

でエイリアスを使用する場合は、全体を別のエイリアスでORDER BYラップできます。SELECTSELECT

SELECT *
FROM 
(
    Select (Country.Name + ', ' + City.Name) as Location
    ...
) x
Where x.Location like '%Punta Cana%'

ORDER BYそれ以外の場合は、句で式を再度使用する必要があります

于 2012-06-26T13:47:29.467 に答える
0

場所は列名ではありません。作成しているのは単なるエイリアスです。

于 2012-06-26T13:42:23.333 に答える