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.