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).