是否有可能在同一个选择中重用聚合函数结果?

时间:2011-09-01 10:44:25

标签: sql sql-server

查看此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

1 个答案:

答案 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适用于更多情况。