我将从伪代码片段开始:
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 秒。 有什么想法吗?
使用子查询来计算要在 case 表达式中多次使用的值,例如
SELECT
CASE
WHEN ComputedExpression > 1 THEN 1
ELSE ComputedExpression
END
FROM (
SELECT *
, [very long expression] ComputedExpression
FROM MyTable
) x;