Da un total acumulado (esta funcionalidad no se implementó en SQL Server hasta la versión 2012 .)
El ORDER BY
define la ventana que se agregará con UNBOUNDED PRECEDING
y CURRENT ROW
como predeterminado cuando no se especifica. El valor predeterminado de SQL Server es menos rendimiento
RANGE
opción en lugar de ROWS
.
Tienen diferente semántica en el caso de empates en que la ventana para el RANGE
La versión incluye no solo la fila actual (y las filas anteriores), sino también cualquier fila vinculada adicional con el mismo valor de a
como la fila actual. Esto se puede ver en el número de filas contadas por cada uno en los resultados a continuación.
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;
Devoluciones
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 lograr el resultado que esperaba obtener, omita ambos la PARTITION BY
y ORDER BY
y usa un OVER()
vacío cláusula (también se muestra arriba).