У меня есть две скалярные функции T-SQL, которые выполняют вычисления для больших объемов данных (занимают «много» времени) и возвращают значение, например, CalculateAllIncomes (EmployeeID) и CalculateAllExpenditures (EmployeeID).
Я запускаю оператор выбора, который вызывает их и возвращает результаты для каждого сотрудника. Мне также нужно, чтобы баланс каждого сотрудника рассчитывался как AllIncomes-AllExpenditures.
У меня есть функция GetBalance (EmployeeID), которая вызывает две вышеупомянутые функции и возвращает результат {CalculateAllIncomes(EmployeeID) - CalculateAllExpenditures(EmployeeID)}
. Но если я сделаю:
Select CalculateAllIncomes(EmployeeID), CalculateAllExpenditures(EmployeeID), GetBalance(EmployeeID) ....
функции CalcualteAllIncomes () и CalculateAllExpenditures вызываются дважды (один раз явно и один раз внутри функции GetBalance), поэтому итоговый запрос занимает вдвое больше времени, чем следует.
Я бы хотел найти лучшее решение. Я попробовал:
select alculateAllIncomes(EmployeeID), AS Incomes, CalculateAllExpenditures
(EmployeeID) AS Expenditures, (Incomes - Expenditures) AS Balance....
но выдает ошибки:
Неверное имя столбца Доходы и
Неверное имя столбца Расходы.
Я уверен, что должно быть простое решение, но я не могу понять это. Почему-то кажется, что я не могу использовать псевдонимы столбцов в предложении SELECT. Это так? И если так, что может быть обходным путем в этом случае?
Спасибо за любые предложения.