0

私は最近、Microsoft SQL Server 2012のT-SQLの基本的なT-SQLの学習の本を開始しました。私は、クエリは、次のエラーメッセージMicrosoft SQL Server 2012のサンプルクエリT-SQLの基本的な動作しません

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

で実行に失敗するこれはsales.empordersの断片であるSQL Server 2008 R2の

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; 

を実行しようとした次のクエリでは

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 
を見ます

SQL Server 2008 r2の回避策を見つける際に助けが必要です

+0

これは、以前のSQL Serverのバージョンではなく、SQL Server 2012で使用できる新しいプロパティです。行範囲句http://www.kodyaz.com/t-sql/sql-last_value-analytic-function-sample-in-sqlserver2012.aspxをSQLServer 2012の新機能である分析関数に適用することができます – Eralper

+0

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

答えて

1

SQL Se rver 2012の機能あなたはOVER機能を使用することができますが、2008R2でのための機能はありません。

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

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

+0

2008年の回避策をお勧めしますか?valフィールドの合計実行は、特定の月の各empidに対して計算されます。 – user2865469

+0

Will今夜それを見てください。 – 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; 
:UNBOUNDED PRECEDING

SEE BETWEEN ROWSは、

0

UNBOUNDED PRECEDINGを使用している場合は、ただ落とすことができます。
あなたは試しましたか?

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

SQL Server 2008 dosentはパーティショニングのみをサポートしており、集計関数の注文はしていません – user2865469

関連する問題