2012-03-28 10 views
0

Ich versuche prozentuale Änderung von 2 Spalten zu berechnen. Da Sie eine Fehlermeldung erhalten, wenn Sie durch 0 teilen, wollte ich eine CASE erstellen, die automatisch 0s behandelt und dann nicht-Nullen behandelt.SQL Server - Berechnung Prozentuale Änderung mit 0 CASE

Das Verhalten, das ich versuche zu implementieren ist: Wenn StartValue 0 ist, dann sind die möglichen Ergebnisse 0 oder 1 (da der aktuelle Wert entweder positiv oder gleich geblieben ist). Wenn der Startwert nicht 0 ist, erhalten Sie die prozentuale Änderung, aber begrenzen Sie das Ergebnis auf -1 bis +1.

UPDATE #Temp 
SET ValueChange = 
CASE 
    WHEN StartValue = 0 THEN (CASE 
     WHEN CurrentValue = 0 THEN 0 
     WHEN CurrentValue > 1 THEN 1 
     ELSE 0 
     END) 
    ELSE 
    WHEN ((CurrentValue - StartValue)/StartValue) > 1 THEN 1 
    WHEN ((CurrentValue - StartValue)/StartValue) < -1 THEN -1 
    ELSE ((CurrentValue - StartValue)/StartValue) 
END; 

Wenn ich diese Abfrage ausführen, bekomme ich diesen Fehler: Incorrect syntax near the keyword 'WHEN'., die den WHEN ((CurrentValue - StartValue)/StartValue) > 1 THEN 1 Abschnitt des Codes verweist.

Gedanken über den besten Weg, um diese Logik zu implementieren?

Antwort

1

Das sollte korrekte Syntax sein:

UPDATE Temp 
SET ValueChange = 
    CASE 
    WHEN StartValue = 0 THEN (
     CASE 
     WHEN CurrentValue = 0 THEN 0 
     WHEN CurrentValue > 1 THEN 1 
     ELSE 0 
     END) 
    ELSE 
     CASE 
     WHEN ((CurrentValue - StartValue)/StartValue) > 1 THEN 1 
     WHEN ((CurrentValue - StartValue)/StartValue) < -1 THEN -1 
     ELSE ((CurrentValue - StartValue)/StartValue) 
     END 
    END;