我将从伪代码段开始:
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
但是在查询中使用此功能会将其速度从2s降低到11s。 有什么想法吗?
答案 0 :(得分:3)
使用子查询来计算要在case语句中多次使用的值,例如
select
CASE
WHEN ComputedExpression > 1 THEN 1
ELSE ComputedExpression
END
from (
select *, [very long expression] ComputedExpression
from MyTable
) x