CASE-WHEN условие без переписывания всего утверждения - PullRequest
0 голосов
/ 12 июня 2019

Я начну с фрагмента псевдокода:

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 с.Есть идеи?

1 Ответ

3 голосов
/ 12 июня 2019

Используйте подзапрос для вычисления значения, которое вы хотите использовать несколько раз в операторе case, например,

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