Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dlaczego nie ma funkcji okienkowych w klauzulach where?

dlaczego nie mogę użyć funkcji okienkowej w klauzuli where w SQL Server?

Jedną z odpowiedzi, choć niezbyt pouczającą, jest to, że specyfikacja mówi, że nie możesz.

Zobacz artykuł autorstwa Itzika Ben Gana - Logiczne przetwarzanie zapytań:co to jest i co dla ciebie oznacza, a w szczególności obraz tutaj. Funkcje okna są oceniane w czasie SELECT na zestawie wyników pozostałych po wszystkich WHERE /JOIN /GROUP BY /HAVING rozpatrzono klauzule (krok 5.1).

naprawdę szukam powodów, dla których nie mogę używać funkcji okna w klauzulach where.

Powód, dla którego nie są dozwolone w WHERE klauzulą ​​jest to, że spowodowałoby to niejednoznaczność. Kradzież przykładu Itzika Ben Gana z wysokowydajnego T-SQL przy użyciu funkcji okna (p.25)

Załóżmy, że Twój stół był

CREATE TABLE T1
(
col1 CHAR(1) PRIMARY KEY
)

INSERT INTO T1 VALUES('A'),('B'),('C'),('D'),('E'),('F')

I Twoje zapytanie

SELECT col1
FROM T1
WHERE ROW_NUMBER() OVER (ORDER BY col1) <= 3
AND col1 > 'B'

Jaki byłby właściwy wynik? Czy spodziewałbyś się, że col1 > 'B' predykat został uruchomiony przed lub po numeracji wierszy?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zero impasu SQL z założenia - jakieś wzorce kodowania?

  2. Podłączanie SQL Server do bazy danych Java

  3. Uzyskaj liczbę nieudanych prób logowania dla logowania z powodu nieprawidłowego hasła w programie SQL Server (T-SQL)

  4. Czy naprawdę muszę używać SET XACT_ABORT ON?

  5. Jak wykryć i zapobiec nieoczekiwanemu wzrostowi bazy danych SQL Server TempDB