Ele fornece um total em execução (essa funcionalidade não foi implementada no SQL Server até a versão 2012 .)
O
ORDER BY
define a janela a ser agregada com UNBOUNDED PRECEDING
e CURRENT ROW
como o padrão quando não especificado. O padrão do SQL Server é o menos desempenho
RANGE
opção em vez de ROWS
. Eles têm semânticas diferentes no caso de empates em que a janela para o
RANGE
version inclui não apenas a linha atual (e as linhas anteriores), mas também todas as linhas vinculadas adicionais com o mesmo valor de a
como a linha atual. Isso pode ser visto no número de linhas contadas por cada um nos resultados abaixo. 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;
Devoluções
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
Para alcançar o resultado que você esperava, omita ambos a
PARTITION BY
e ORDER BY
e use um OVER()
vazio cláusula (também mostrada acima).