看一下这个TSQL代码:
SELECT A, B, C, (MAX(A) - MAX(B))*C AS 'myCalculatedColumn', dbo.[udf_GetBetaInv]((MAX(A) - MAX(B))*C, A, B, C) as 'BetaInv' FROM dbo.MyTable WHERE...
有没有什么办法可以使用该块:(MAX(A) - MAX(B))*C仅写入一次并在myCalculatedColumn定义中使用,并且还可以在同一条语句中用作udf的参数。
(MAX(A) - MAX(B))*C
我主要关心性能,不确定SQL Server是一次还是多次计算,但即使仅一次,也最好使SQL代码更具可读性和紧凑性,并且只有一个地方可以修改,以防万一我们需要更改公式。
编辑。建议我最近将CROSS APPLY用于完全相同的问题:通过使用CTE简化SQL语句
您可以在CTE中定义它
WITH CTE AS ( SELECT A, B, C, ( MAX(A) - MAX(B) ) * C AS myCalculatedColumn FROM dbo.MyTable WHERE... ) SELECT *, dbo.[udf_GetBetaInv](myCalculatedColumn, A, B, C) as 'BetaInv' from CTE
或较不冗长的方法是在中定义它CROSS APPLY。CTE在更多情况下有效。
CROSS APPLY