Udává průběžný součet (tato funkce nebyla implementována v SQL Serveru do verze 2012 .)
ORDER BY definuje okno, které má být agregováno pomocí UNBOUNDED PRECEDING a CURRENT ROW jako výchozí, pokud není uvedeno. SQL Server je ve výchozím nastavení méně výkonný
RANGE možnost namísto ROWS .
Mají odlišnou sémantiku v případě remíz v okně pro RANGE verze obsahuje nejen aktuální řádek (a předchozí řádky), ale také všechny další svázané řádky se stejnou hodnotou a jako aktuální řádek. To lze vidět na počtu řádků, které každý započítá ve výsledcích níže.
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;
Vrá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
Chcete-li dosáhnout výsledku, který jste očekávali, vynechejte obojí PARTITION BY a ORDER BY a použijte prázdné OVER() klauzule (také zobrazena výše).