proč nemohu použít funkci v okně v klauzuli where na serveru SQL?
Jedna odpověď, i když ne příliš informativní, je, protože specifikace říká, že nemůžete.
Viz článek Itzika Ben Gana – Logické zpracování dotazů:Co to je a co pro vás znamená a zejména obrázek zde. Funkce okna se vyhodnocují v okamžiku SELECT
na výsledné sadě zbývající po všech WHERE
/JOIN
/GROUP BY
/HAVING
doložky byly projednány (krok 5.1).
opravdu hledám důvod, proč nemohu používat funkce oken v klauzulích where.
Důvod, proč nejsou povoleny v WHERE
klauzule je, že by to vytvořilo nejednoznačnost. Krádež příkladu Itzika Bena Gana z vysoce výkonného T-SQL pomocí funkcí okna (str. 25)
Předpokládejme, že váš stůl byl
CREATE TABLE T1
(
col1 CHAR(1) PRIMARY KEY
)
INSERT INTO T1 VALUES('A'),('B'),('C'),('D'),('E'),('F')
A váš dotaz
SELECT col1
FROM T1
WHERE ROW_NUMBER() OVER (ORDER BY col1) <= 3
AND col1 > 'B'
Jaký by byl správný výsledek? Očekávali byste, že col1 > 'B'
predikát běžel před nebo za číslováním řádku?