Ini memberikan total berjalan (fungsi ini tidak diterapkan di SQL Server sampai versi 2012 .)
ORDER BY
mendefinisikan jendela yang akan digabungkan dengan UNBOUNDED PRECEDING
dan CURRENT ROW
sebagai default bila tidak ditentukan. SQL Server default ke berperforma kurang baik
RANGE
opsi daripada ROWS
.
Mereka memiliki semantik yang berbeda dalam hal ikatan di jendela untuk RANGE
versi tidak hanya mencakup baris saat ini (dan baris sebelumnya) tetapi juga setiap baris terikat tambahan dengan nilai a
yang sama sebagai baris saat ini. Hal ini dapat dilihat pada jumlah baris yang dihitung oleh masing-masing pada hasil di bawah ini.
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;
Pengembalian
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
Untuk mencapai hasil yang Anda harapkan, hilangkan keduanya PARTITION BY
dan ORDER BY
dan gunakan OVER()
empty yang kosong klausa (juga ditunjukkan di atas).