Изменить эту хранимую процедуру, чтобы избежать использования CROSS APPLY? - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь показать имена начальников и их ответственных работников в разных столбцах.

Мне удалось сделать это с помощью перекрестного применения, но меня попросили сделать это без использования, но я не могу придумать, как это сделать.

Я использую база данных Northwind для SQL сервера, и это мой код:

CREATE PROCEDURE sp_getBossAndEmployeeNames
    @bossID NCHAR(5)
AS
    CREATE TABLE #TEMP_BOSSES_AND_EMPLOYEES
    (
        BossFullName VARCHAR(35), 
        EmployeeFullName VARCHAR(35)
    )

    INSERT INTO #TEMP_BOSSES_AND_EMPLOYEES
    SELECT (FirstName + ' ' + LastName) as BossFullName, sub.EmployeeFullName 
    FROM Employees 
    CROSS APPLY 
    (
        SELECT (FirstName + ' ' + LastName) as EmployeeFullName FROM Employees WHERE ReportsTo = @bossID 
    ) AS sub
    WHERE EmployeeID = @bossID 

    SELECT * FROM #TEMP_BOSSES_AND_EMPLOYEES

1 Ответ

1 голос
/ 06 апреля 2020

Просто используйте INNER JOIN:

SELECT B.FirstName + ' ' + B.LastName AS BossFullName
    , E.FirstName + ' ' + E.LastName AS EmployeeFullName
FROM dbo.Employees B
INNER JOIN dbo.Employees E ON E.ReportsTo = B.id
WHERE B.EmployeeID = @bossID;

Насколько мне известно, вам даже не нужна временная таблица.

...