mengapa saya tidak bisa menggunakan fungsi berjendela di klausa where di SQL Server?
Satu jawaban, meskipun tidak terlalu informatif, adalah karena spesifikasinya mengatakan bahwa Anda tidak bisa.
Lihat artikel oleh Itzik Ben Gan - Pemrosesan Kueri Logis:Apa Artinya Dan Apa Artinya Bagi Anda dan khususnya gambar di sini. Fungsi jendela dievaluasi pada saat SELECT
pada set hasil yang tersisa setelah semua WHERE
/JOIN
/GROUP BY
/HAVING
klausa telah ditangani (langkah 5.1).
benar-benar saya sedang mencari alasan di balik tidak dapat menggunakan fungsi jendela di mana klausa.
Alasan bahwa mereka tidak diperbolehkan di WHERE
klausa adalah bahwa hal itu akan menciptakan ambiguitas. Mencuri contoh Itzik Ben Gan dari T-SQL Kinerja Tinggi Menggunakan Fungsi Jendela (hal.25)
Misalkan tabel Anda adalah
CREATE TABLE T1
(
col1 CHAR(1) PRIMARY KEY
)
INSERT INTO T1 VALUES('A'),('B'),('C'),('D'),('E'),('F')
Dan pertanyaan Anda
SELECT col1
FROM T1
WHERE ROW_NUMBER() OVER (ORDER BY col1) <= 3
AND col1 > 'B'
Apa yang akan menjadi hasil yang tepat? Apakah Anda mengharapkan col1 > 'B'
predikat dijalankan sebelum atau sesudah penomoran baris?