2016-04-01 7 views
0

Ich muss einen Prozentsatz basierend auf zwei Zeilen nebeneinander berechnen. Die Select-Anweisung findet sie und berechnet korrekt, aber die Update-Fehler sagt:SQL Server 2012 Update mit Select Kombinieren von 2 Zeilen, um SET-Wert zu erhalten

falsche Syntax nahe dem Schlüsselwort

-Code 'Gruppe':

Update L 
Set [TCKR%] = (L.Stock_Close - E.Stock_Close)/L.Stock_Close 
From HistData as L 
Inner Join HistData as E on L.RecordID = E.RecordID + 1 
Where L.RecordID = L.RecordID 
Group by L.RecordID, L.Stock_Close, E.Stock_Close 

Order by nicht funktioniert entweder

+2

Sie können ein Aggregat in einer UPDATE-Abfrage nicht verwenden. Überprüfen Sie diese Antwort: http://StackOverflow.com/A/2853556/5948715 – Balde

Antwort

0

Ich glaube nicht, dass es einen Grund gibt, GROUP BY in diesem Fall durchzuführen:

UPDATE L 
SET [TCKR%] = (L.Stock_Close - E.Stock_Close)/L.Stock_Close 
FROM HistData as L 
JOIN HistData AS E on L.RecordID = E.RecordID + 1 

Hinweis: Wenn Stock_Close vom Typ int dann muss man entweder den nominator oder den Nenner mit 1.0 multiplizieren, um Integer-Division zu vermeiden.

+0

die Datensätze sind nicht in Ordnung, es sei denn, ich bestelle sie. Dies funktioniert korrekt mit der Gruppe ohne es; es aktualisiert die falschen Zeilen, auch [TCKR%] ist dezimal (9,6): die Auswahl funktioniert wie gesagt. Also muss er die Zeilen irgendwie nach RecordID ordnen. –

+0

Eigentlich macht Ihr Code es meine einzige Zeile seiner Aktualisierung der Zeile unterhalb RecordID TICKR% NULL 2 0,0005 3 -0,0003 –

+0

Oder wie kann ich die Tabelle neu anordnen aus, so RecordID standardmäßig aufsteigend ist? –