Je methode is redelijk. Goede vangst op de nullif()
in de sum()
, trouwens. Hoewel de else
clausule is pas berekend na de then
, componenten van else worden berekend tijdens de aggregatie -- dus log(0)
zou een fout retourneren.
Ik denk dat er een aantal eenvoudigere manieren zijn om het teken te berekenen, zoals:
power(-1, sum(case when column1 < 0 then 1 else 0 end))
of:
(case when sum(case when column1 < 0 then 1 else 0 end) % 2 = 0 then 1 else -1 end)
Welke versie "eenvoudiger" is, is echter een kwestie van mening.