Той дава текуща обща сума (тази функционалност не беше внедрена в SQL Server до версия 2012 г. .)
ORDER BY
дефинира прозореца, който да бъде агрегиран с UNBOUNDED PRECEDING
и CURRENT ROW
като по подразбиране, когато не е посочено. SQL Server по подразбиране е по-малко производителен
RANGE
опция вместо ROWS
.
Те имат различна семантика в случай на връзки в този прозорец за RANGE
версията включва не само текущия ред (и предходните редове), но и всички допълнителни обвързани редове със същата стойност на a
като текущия ред. Това може да се види в броя на редовете, преброени от всеки в резултатите по-долу.
SELECT a,
b,
COUNT(*) OVER (ORDER BY a
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS [Rows],
COUNT(*) OVER (ORDER BY a
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS [Range],
COUNT(*) OVER() AS [Over()]
FROM t;
Връщане
a b Rows Range Over()
-------- -------- ----------- ----------- -----------
NULL NULL 1 4 12
NULL NULL 2 4 12
NULL NULL 3 4 12
NULL NULL 4 4 12
a b 5 7 12
a b 6 7 12
a b 7 7 12
c d 8 11 12
c d 9 11 12
c d 10 11 12
c d 11 11 12
e NULL 12 12 12
За да постигнете резултата, който сте очаквали, пропуснете и двете PARTITION BY
и ORDER BY
и използвайте празен OVER()
клауза (също показана по-горе).