查看此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的参数。
我主要关心的是性能,不确定SQL Server是一次还是多次计算,但即使只有一次,最好让SQL代码更具可读性和紧凑性,并且只有一个地方可以修改以防我们改变一个公式。
编辑。我被建议最近使用CROSS APPLY用于完全相同的问题:simplify SQL statement by using CTE
答案 0 :(得分:5)
您可以在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
或者define it in a CROSS APPLY
更简洁的方法。 CTE适用于更多情况。