微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

解决方法

看一下这个TSQL代码:

SELECT A,B,C,(MAX(A) - MAX(B))*C AS 'myCalculatedColumn',dbo.[udf_GetBetaInv]((MAX(A) - MAX(B))*C,A,C) as 'BetaInv'
FROM dbo.MyTable
WHERE...

有没有什么办法可以使用该块:(MAX(A) - MAX(B))*C仅写入一次并在myCalculatedColumn定义中使用,并且还可以在同一条语句中用作udf的参数。

我主要关心性能,不确定SQL
Server是一次还是多次计算,但即使仅一次,也最好使SQL代码更具可读性和紧凑性,并且只有一个地方可以修改,以防万一我们需要更改公式。

编辑。建议我最近将CROSS
APPLY用于完全相同的问题:通过使用CTE简化SQL语句

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。