CASE-WHEN 条件,无需重写整个语句

问题描述 投票:0回答:1

我将从伪代码片段开始:

CASE
    WHEN [very long expression] > 1 THEN 1
    ELSE [very long expression]
END

是否可以避免重写整个表达式?

我已经尝试创建自己的函数:

CREATE FUNCTION fn_isLargerThanOne(@v FLOAT)
RETURNS FLOAT
AS BEGIN
    IF(@v > 1)
    BEGIN
        SET @v = 1
    END
    RETURN @v
END

但是在我的查询中使用此函数会将其速度从 2 秒减至 11 秒。 有什么想法吗?

sql sql-server case-when
1个回答
4
投票

使用子查询来计算要在 case 表达式中多次使用的值,例如

SELECT
    CASE
        WHEN ComputedExpression > 1 THEN 1
        ELSE ComputedExpression
    END
FROM (
    SELECT *
        , [very long expression] ComputedExpression
    FROM MyTable
) x;
© www.soinside.com 2019 - 2024. All rights reserved.