2016-06-28 14 views
2
declare @t table (cid int, amount int, cname varchar) 

insert into @t 
values (6, 20, 'C'), (7, 30, 'C'), (8, 10, 'C'), (9, 10, 'D') 

select 
    sum(amount) over (partition by cname order by cid), 
    * 
from @t 

Wirft einen Fehler gibt:SQL Server 2012: Summe über, um durch Fehler falsche Syntax in der Nähe 'bestellen'

Incorrect syntax near 'order'.

https://msdn.microsoft.com/en-us/library/ms187810.aspx

nicht über Auftragssumme von in SQL Server 2012 unterstützt ? Wenn ich die Reihenfolge lösche und nur die Partition benutze, funktioniert es, aber für 'C' bekomme ich 60 für alle Zeilen. Ich möchte total laufen.

Weitere Informationen:

  • Microsoft SQL Server Management Studio 11.0.2100.60
  • Microsoft Analysis Services Client Tools 11.0.2100.60
  • Microsoft Data Access Components (MDAC) 6.1.7601.17514

Datenbankoption -> Kompatibilitätsgrad zeigt nur 2000, 2005 und 2008, mit 2008 ausgewählt.

Versuch

ALTER DATABASE database_name 
SET COMPATIBILITY_LEVEL = 110 

Wirft einen Fehler auszuführen:

Valid values of the database compatibility level are 80, 90, or 100.

+0

Hmmm, sind Sie SSMS 2012 mit einer früheren Version der Engine-Datenbank? –

+0

@GordonLinoff Ja, ich denke, du hast Recht. 'Select @@ version' gab mir' Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) \t 2. April 2010 15.48.46 \t Copyright (c) Microsoft Corporation \t Standard Edition (64-bit) unter Windows NT 6.1 (Build 7601: Service Pack 1) '. Nicht sicher, wie das überhaupt möglich ist. – curious

+1

SSMS ist eine Schnittstelle; Es kann mit mehreren Versionen der Datenbank kommunizieren. –

Antwort

4

Kumulative Summen werden nicht bis SQL Server 2012+ unterstützt. Vermutlich verwenden Sie SQL Server 2005 oder 2008, oder Ihre Kompatibilitätseinstellung ist auf 105 oder weniger festgelegt (siehe here).

In diesen Versionen können Sie outer apply verwenden:

select t.*, s.amount 
from @t t outer apply 
    (select sum(t2.amount) as amount 
     from @t t2 
     where t2.cname = t.cname and t2.cid <= t.cid 
    ) s; 
+1

@sgeddes. . . Ich habe mehr über den Kompatibilitätsgrad geklärt. –

+0

@sgeddes: Mit den Standardeinstellungen von 2012 sollte die Abfrage von OP funktionieren. – DarkKnight

+0

Danke, habe das gerade gesehen. – sgeddes