SQL - 在子查询的where子句中使用别名

Ste*_*ven 7 sql t-sql sql-server sql-server-2008

所以这实际上不是我的代码,而只是我正在尝试做的一个例子.理想情况下,我可以使用INNER JOINS和外键关系来获取数据,但我不能在现实生活中 - 这只是一个简单的例子.

SELECT [EmployeeID],
       [DepartmentID],
       (SELECT Title FROM Depts WHERE ID = [DepartmentID]) AS Department, 
       (SELECT Name FROM DeptHeads WHERE DeptName = Department) AS DepartmentLead
FROM   Employees E
Run Code Online (Sandbox Code Playgroud)

我从一个表(Employees)获取数据.

我在子查询的where子句中使用该表(DepartmentID)中的一列,并从中创建别名(Department)

我正在尝试做与上面相同的事情,除了在where子句中使用该别名.

我收到一个错误说:

列名称"部门"无效

有没有更好的方法让我这样做,或者解决这个问题?

xan*_*tos 8

您不能使用刚刚定义的别名.您可以:

SELECT * FROM (

    SELECT [EmployeeID],
               [DepartmentID],
               (SELECT Title FROM Depts WHERE ID = [DepartmentID]) AS Department, 
               (SELECT Name FROM DeptHeads WHERE DeptName = Department) AS DepartmentLead
    FROM   Employees E

) Base

WHERE Base.Department = ...
Run Code Online (Sandbox Code Playgroud)


Gia*_*los 6

;WITH MyCTE AS
(
    SELECT [EmployeeID],
       [DepartmentID],
       (SELECT Title FROM Depts WHERE ID = [DepartmentID]) AS Department, 
       (SELECT Name FROM DeptHeads WHERE DeptName = Department) AS DepartmentLead
    FROM   Employees E
)
SELECT *
FROM   MyCTE
WHERE  Department = 'IT'
Run Code Online (Sandbox Code Playgroud)