9

これは実際には私のコードではなく、私がやろうとしていることの単なる例です。理想的には、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

1 つのテーブル (従業員) からデータを取得しています。

そのテーブルの列の 1 つ (DepartmentID) をサブクエリの where 句で使用し、その (Department) からエイリアスを作成しています。

次に、where 句でそのエイリアスを使用することを除いて、上記と同じことをしようとしています。

次のようなエラーが表示されます。

無効な列名「Department」

これを行うためのより良い方法、またはこれを回避する方法はありますか?

4

3 に答える 3

11

定義したエイリアスは使用できません。あなたはできる:

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 = ...
于 2013-08-09T16:32:41.307 に答える
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'
于 2013-08-09T16:32:40.793 に答える
1

方法 1:

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

where 句で [Department] エイリアスを使用する

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

方法 2:

SELECT E.[EmployeeID],
       E.[DepartmentID],
       D.Title AS Department, 
       DH.Name AS DepartmentLead
FROM   Employees E
LEFT JOIN Depts D ON E.[DepartmentID] = D.ID
LEFT JOIN DeptHeads DH ON D.Title = DH.DeptName
于 2013-08-10T03:06:13.820 に答える