Таблица вычисляемого поля - по нескольким показателям
Я пытаюсь взять минимум из набора полей, за исключением 0. Я довольно новичок в использовании вычисляемых полей в таблице.
Мне удалось связать функцию min следующим образом:MIN(MIN(MIN([a],[b]), [c]), [d]) etc...
Однако я не могу найти способ отфильтровывать 0 для каждого из моих показателей. Я пытался что-то с REGEXP_REPLACE. Я также попытался установить большее значение IF THEN для значений, например:
IF [a] > 0 THEN [a]
IF [b] > 0 THEN [b]
Так что новые значения будут обнулены. Но это тоже не сработало из-за моей необходимости объединить их все в этом вычисляемом поле. Какой функциональный способ рассчитать что-то вроде этого? Предполагая, что я не могу изменить данные за пределами Таблицы, как можно обработать изменение нескольких полей, как это?
Желаемый результат:
(Псевдокод)
given that a,b,c,d,e = 15,0,10,0,25
Min_No0([a],[b],[c],[d],[e],...) = 10
2 ответа
Хорошо, я смог успешно сделать следующее:
MIN(MIN(IF [a] = 0 THEN 9999999 ELSE [a] END,
IF [b] = 0 THEN 9999999 ELSE [b] END),
IF [c] = 0 THEN 9999999 ELSE [c] END)
Путем цепочки min и наличия оператора if в функции min. Я уверен, что это не лучший способ, но это сработало.
Вот решение, которое ищет MIN() между столбцами [a] [b] и [c], исключая и значения, которые равны нулю.
MIN(MIN(IF [a] !=0 THEN [a]
ELSEIF [b] !=0 THEN [b]
ELSEIF [c] !=0 THEN [c]
END,
IF [b] !=0 THEN [b]
ELSEIF [c] !=0 THEN [c]
ELSEIF [a] !=0 THEN [a]
END),
IF [c] !=0 THEN [c]
ELSEIF [a] !=0 THEN [a]
ELSEIF [b] !=0 THEN [b]
END)
Внутренний MIN() сравнивает [a] и [b]. Если любое из этих чисел равно нулю, оно заменяет другое число, при условии, что это число также не равно нулю. Внешний MIN() сравнивает [c] с меньшим числом из внутреннего MIN().
Если [a], [b] и [c] равны нулю, результатом будет, конечно, "Ноль".