Din metod är ganska rimlig. Bra fångst på nullif()
i sum()
, förresten. Även om else
klausul är beräknas endast efter then
, komponenter av else beräknas under aggregeringen -- så log(0)
skulle returnera ett fel.
Jag tror att det finns några enklare sätt att beräkna tecknet, till exempel:
power(-1, sum(case when column1 < 0 then 1 else 0 end))
eller:
(case when sum(case when column1 < 0 then 1 else 0 end) % 2 = 0 then 1 else -1 end)
Vilken version som är "enklare" är dock en åsiktsfråga.