小编典典

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

sql

看一下这个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用于完全相同的问题:通过使用CTE简化SQL语句


阅读 194

收藏
2021-05-30

共1个答案

小编典典

您可以在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在更多情况下有效。

2021-05-30