SQL Server 当条件表达式和赋值表达式具有相同的计算时,如何优化CASE WHEN - THEN语句

gblwokeq  于 2023-01-08  发布在  其他
关注(0)|答案(2)|浏览(174)

我有一个很长的嵌套SELECT查询

CASE WHEN complex_function (field) > x 
THEN complex_function (field) 
ELSE z END.

我的理解是,上述语法中的complex_function将执行两次,一次是在检查条件时,另一次是在实际赋值时。是否有办法只计算一次以加快执行速度,或者是否由SQL引擎在幕后处理。
这是在嵌套的几层SELECT语句中的子查询中,在非SQL中,我只需要为复杂函数的输出分配一个变量,然后重用它。

mpgws1up

mpgws1up1#

您可以进一步将计算嵌套在查询的另一个级别中:

SELECT CASE WHEN complex > x  THEN complex ELSE z END
FROM   (SELECT complex_function (field) 
        FROM   some_table -- or complicated nested query
       ) t
new9mtju

new9mtju2#

您可以使用CTE在具有字段参数的表中添加计算字段,然后在JOIN中使用此表而不是原始表

;WITH
C AS (
    SELECT *, complex_function(field) calc_field
    FROM table_containing_the_field
)
SELECT *, CASE WHEN calc_field > x  THEN calc_field ELSE z END
FROM your_table T 
JOIN /* table_containing_the_field */ C ON T.some_field = C.some_field

相关问题