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?