あなたの方法はかなり合理的です。 nullif() の良いキャッチ sum() で 、 ところで。 else 節 is then の後にのみ計算されます 、else のコンポーネントは集計中に計算されます -- したがって log(0) エラーを返します。
次のように、符号を計算する簡単な方法がいくつかあると思います:
power(-1, sum(case when column1 < 0 then 1 else 0 end))
または:
(case when sum(case when column1 < 0 then 1 else 0 end) % 2 = 0 then 1 else -1 end)
ただし、どちらのバージョンが「よりシンプル」かは意見の問題です。