无需重写整个语句的 CASE-WHEN 条件
CASE-WHEN condition without rewriting the whole statement
我将从一个伪代码片段开始:
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 秒。
有什么想法吗?
使用 sub-query 计算要在 case 表达式中多次使用的值,例如
select
CASE
WHEN ComputedExpression > 1 THEN 1
ELSE ComputedExpression
END
from (
select *, [very long expression] ComputedExpression
from MyTable
) x
我将从一个伪代码片段开始:
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 秒。 有什么想法吗?
使用 sub-query 计算要在 case 表达式中多次使用的值,例如
select
CASE
WHEN ComputedExpression > 1 THEN 1
ELSE ComputedExpression
END
from (
select *, [very long expression] ComputedExpression
from MyTable
) x