如何解决是否可以在同一选择中重用聚合函数结果?
您可以在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 举报,一经查实,本站将立刻删除。