sql >> Databáze >  >> RDS >> Sqlserver

Proč v klauzulích where nejsou žádné funkce v okně?

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?



  1. Sloupec Postgresql nebyl nalezen, ale zobrazuje se v popisu

  2. Jak importovat / obnovit tabulky MySql pomocí PHP

  3. Oracle Data Mining (ODM) – instalace a nastavení

  4. Existuje ekvivalent Oracle k SQL Serveru OUTPUT INSERTED.*?