【问题标题】:Is it possible to reuse aggregate functions results in the same select?是否可以在相同的选择中重用聚合函数结果?
【发布时间】:2011-09-01 10:44:24
【问题描述】:

看看这个 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

【问题讨论】:

    标签: sql sql-server


    【解决方案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
    

    或者一个不那么冗长的方法是define it in a CROSS APPLY。 CTE 适用于更多情况。

    【讨论】:

    • 很酷的作品就像一个魅力,同样的表现,但更干净的代码,谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2021-03-20
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    相关资源
    最近更新 更多