Seu método é bastante razoável. Boa captura no
nullif() na sum() , a propósito. Embora o else cláusula é computado somente após o then , os componentes do else são calculados durante a agregação -- então log(0) retornaria um erro. Acho que existem algumas maneiras mais simples de calcular o sinal, como:
power(-1, sum(case when column1 < 0 then 1 else 0 end))
ou:
(case when sum(case when column1 < 0 then 1 else 0 end) % 2 = 0 then 1 else -1 end)
No entanto, qual versão é "mais simples" é uma questão de opinião.