関数の結果をフィルタリングしてエイリアスを使用する必要がある場合は、サブクエリの使用を検討する必要があります。
select a1, a2, mySelector
from
(
select a1,
a2,
....
(select [dbo].[myFunction](a1, a2)) as mySelector
from yourtable
) d
where mySelector = @sel;
SELECT リストで使用しているエイリアスは、WHERE 句では使用できません。MSDNから: SELECT ステートメントの論理処理順序:
次の手順は、SELECT ステートメントの論理的な処理順序 (バインド順序) を示しています。この順序により、あるステップで定義されたオブジェクトが後続のステップの句でいつ使用可能になるかが決まります。たとえば、クエリ プロセッサが FROM 句で定義されたテーブルまたはビューにバインド (アクセス) できる場合、これらのオブジェクトとその列は、後続のすべてのステップで使用できるようになります。逆に、SELECT 句は手順 8 であるため、その句で定義された列の別名または派生列は、前の句で参照できません。ただし、ORDER BY 句などの後続の句で参照できます。ステートメントの実際の物理的な実行はクエリ プロセッサによって決定され、順序はこのリストと異なる場合があることに注意してください。
- から
- オン
- 加入
- どこ
- グループ化
- WITH CUBE または WITH ROLLUP
- 持っている
- 選択する
- 明確
- オーダーバイ
- 上