Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengapa tidak ada fungsi berjendela di klausa where?

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?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pemeriksaan Cadangan SQL Server

  2. DateDiff untuk menampilkan jam dan menit

  3. Bagaimana menjalankan prosedur tersimpan di sql server setiap jam?

  4. SQL - Panggil Prosedur Tersimpan untuk setiap record

  5. Cara Mengubah Susunan Database SQL Server menggunakan T-SQL