SQL Master データベースエンジニアとセキュリティエンジニアとLinuxエンジニアのための情報

【SQL Server】WHERE句では列別名が使用できない。

特に意識はしていなかったのですが、WHERE句では列別名が使用できませんね。

SELECT employee_id as ID, user_name as Name, dept_cd as Dept
FROM emp_list
WHERE ID = ‘100’;

このように、WHERE句で列別名であるIDを使用すると、エラーとなってしまいます。よって、WHERE句には列名である、employee_idを使用しなければなりません。上記のような場合であれば単純に列別名を指定せず、列名を指定すれば良いのですが、次の例の場合は、どうしても列別名を使用したくなります。

SELECT REPLACE(REPLACE(FullPCName, ‘.sql.jpn.org’, ”), SUBSTRING(REPLACE(FullPCName, ‘.sql.jpn.org’, ”), 0, CHARINDEX(’#’, REPLACE(FullPCName, ‘.sql.jpn.org’, ”))+1), ”) as ServerName, operating_system, language
FROM computer_list
WHERE ServerName = ‘server01’

WHERE句に列別名であるServerNameを使用していますが、これではエラーとなってしまいます。よって、次のように記述しなければなりません。

SELECT REPLACE(REPLACE(FullPCName, ‘.sql.jpn.org’, ”), SUBSTRING(REPLACE(FullPCName, ‘.sql.jpn.org’, ”), 0, CHARINDEX(’#’, REPLACE(FullPCName, ‘.sql.jpn.org’, ”))+1), ”) as ServerName, operating_system, language
FROM computer_list
WHERE REPLACE(REPLACE(FullPCName, ‘.sql.jpn.org’, ”), SUBSTRING(REPLACE(FullPCName, ‘.sql.jpn.org’, ”), 0, CHARINDEX(’#’, REPLACE(FullPCName, ‘.sql.jpn.org’, ”))+1), ”) = ‘server01’;

一度ビューなどをかましてからクエリを作成した方が良いかもしれませんね。