Вашият метод е доста разумен. Добър улов на nullif() в sum() , между другото. Въпреки че else клауза е изчислен само след then , компонентите на else се изчисляват по време на агрегацията -- така че log(0) ще върне грешка.
Мисля, че има някои по-прости начини за изчисляване на знака, като например:
power(-1, sum(case when column1 < 0 then 1 else 0 end))
или:
(case when sum(case when column1 < 0 then 1 else 0 end) % 2 = 0 then 1 else -1 end)
Коя версия обаче е "по-проста" е въпрос на мнение.