0

ich recenty haben begonnen folgende Microsoft SQL Server 2012 T-SQL Fundamental Buch T-SQL zu lernen. Die folgende Abfrage Ich habe versucht, in SQL Server 2008 r2 AusführungBeispielabfrage von Microsoft SQL Server 2012 T-SQL grundlegende nicht funktioniert

SELECT empid, ordermonth, val, 
SUM(val) OVER(PARTITION BY empid 
       ORDER BY ordermonth 
       ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS runval 
FROM Sales.EmpOrders; 

die Abfrage mit der folgenden Fehlermeldung

Msg 102, Level 15, State 1, Line 5 
Incorrect syntax near 'ROWS'. 

das ist das Fragment von sales.emporders

sieht auszuführen nicht
empid ordermonth     qty  val   numorders 
----------------------------------------------------------------- 
5  2007-10-01 00:00:00.000  361  7581.33   9 
6  2007-06-01 00:00:00.000  173  3464.81   7 
9  2007-09-01 00:00:00.000  93  8776.15   5 
5  2008-02-01 00:00:00.000  276  5377.06   15 
5  2007-07-01 00:00:00.000  213  6475.40   5 
4  2006-10-01 00:00:00.000  613  13718.97  27 

Benötigen

+0

Dies ist eine neue Eigenschaft, die mit SQL Server 2012 und nicht mit früheren SQL Server-Versionen verwendet werden kann. Sie können auch die Reihen Bereich Klausel http://www.kodyaz.com/t-sql/sql-last_value-analytic-function-sample-in-sqlserver2012.aspx auf analytische Funktionen anzuwenden, die mit – Eralper

+0

http SQLServer 2012 neu sind: //stackoverflow.com/questions/860966/calculate-a-running-total-in-sql-server –

Antwort

1

Es ist kein SQL Se eine Arbeit um für SQL Server 2008 R2 in figureing helfen rver 2012 Funktionalität. Sie können Funktion OVER verwenden, aber in 2008R2 gibt es keine Funktionalität für: Reihen zwischen UNBOUNDED PRECEDING

SEE:

https://msdn.microsoft.com/en-us/library/ms189461(v=sql.105).aspx (2008R2)

UND

https://msdn.microsoft.com/en-us/library/ms189461(v=sql.110).aspx (2012)

+0

können Sie bitte eine Abhilfe für das Jahr 2008 r2 laufende Summe der val Feld legen nahe, für jeden empid für einen bestimmten Monat – user2865469

+0

Will berechnet Sieh es dir heute Abend an. – Jeffrey

0
SELECT empid, 
     ordermonth, 
     val, 
     (SELECT SUM(val) 
     FROM Sales.EmpOrders ee 
     WHERE e.empid=ee.empid 
     AND ee.ordermonth<=e.ordermonth) AS runval 
FROM Sales.EmpOrders e; 
0

Wenn Sie UNBOUNDED verwenden PRECEDING ich denke, man kann es nur fallen
Hast du es versucht?

SELECT empid, ordermonth, val 
    , SUM(val) OVER(PARTITION BY empid ORDER BY ordermonth) AS runval 
FROM Sales.EmpOrders; 
+0

Nun scheint es sql Server 2008 Dosent unterstützt nur Partitionierung und nicht für Aggregatfunktionen bestellen – user2865469