我有两个T-SQL标量函数,它们都对大量数据进行计算(花费大量时间)并返回一个值,例如, CalculateAllIncomes(EmployeeID)和CalculateAllExpenditures(EmployeeID)。如何避免在需要组合结果时多次调用T-SQL函数?
我运行调用这些并返回结果为每个员工的SELECT语句。我还需要将每个员工的余额计算为AllIncomes-AllExpenditures。
我有一个函数为getBalance(雇员)调用所述两个上述功能并返回结果{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子句中使用列别名。是这样吗?如果是这样,在这种情况下可以采取什么解决方法? 感谢您的任何建议。
你可以在你的客户端代码中进行组合吗? – Paddy 2010-08-11 11:58:33
此选择语句是在应用程序的不同位置多次使用的视图的一部分。所以我认为将它包含在视图中是有意义的,这样我就不必在不同的地方重写相同的计算。毕竟我认为这是Views的全部目的。 – Trex 2010-08-13 08:31:07