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

时间:2019-06-12 08:35:15

标签: sql sql-server case-when

我将从伪代码段开始:

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。 有什么想法吗?

1 个答案:

答案 0 :(得分:3)

使用子查询来计算要在case语句中多次使用的值,例如

select
  CASE
    WHEN ComputedExpression > 1 THEN 1
    ELSE ComputedExpression
  END
from (
  select *, [very long expression] ComputedExpression
  from MyTable
) x