Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So finden Sie die laufende Multiplikation

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.