Ihre Methode ist ziemlich vernünftig. Guter Fang beim nullif()
in der sum()
, übrigens. Obwohl die else
Klausel ist erst nach dem then
berechnet , Komponenten von else werden während der Aggregation berechnet – also log(0)
würde einen Fehler zurückgeben.
Ich denke, es gibt einige einfachere Möglichkeiten, das Vorzeichen zu berechnen, wie zum Beispiel:
power(-1, sum(case when column1 < 0 then 1 else 0 end))
oder:
(case when sum(case when column1 < 0 then 1 else 0 end) % 2 = 0 then 1 else -1 end)
Welche Version "einfacher" ist, ist jedoch Ansichtssache.