Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Egyes esetekben érdemes lehet kizárni az egyes sorokat a csoportokból (WHERE
záradék használatával), mielőtt feltételt alkalmazna a csoportok egészére (HAVING
záradék használatával).
A HAVING
záradék olyan, mint egy WHERE
záradék, de csak a csoportok egészére vonatkozik (azaz a csoportokat képviselő eredményhalmaz soraira), míg a WHERE
záradék az egyes sorokra vonatkozik. A lekérdezések WHERE
záradékot és HAVING
záradékot is tartalmazhatnak. Ebben az esetben:
A
WHERE
záradékot először a Diagram ablaktáblán lévő táblák vagy táblaértékű objektumok egyes soraira alkalmazza a rendszer. Csak aWHERE
záradék feltételeinek megfelelő sorok vannak csoportosítva.A
HAVING
záradék ezután az eredményhalmaz soraira lesz alkalmazva. A lekérdezés kimenetében csak azok a csoportok jelennek meg, amelyek megfelelnek aHAVING
feltételeknek. AHAVING
záradékot csak olyan oszlopokra alkalmazhatja, amelyek a GROUP BY záradékban vagy az összesítő függvényben is megjelennek.
Adjon meg WHERE és HAVING záradékot két összekapcsolt táblán
Jegyzet
A cikkben használt adatbázis az pubs
adatbázis, amely Northwind és pubs mintaadatbázisból érhető el a Microsoft SQL Server GitHubon.
Tegyük fel például, hogy a titles
és a publishers
táblákhoz csatlakozva létrehoz egy lekérdezést, amely megjeleníti a kiadók átlagos könyvárát. Csak bizonyos kiadók átlagos árát szeretné látni – talán csak Kalifornia állam kiadóit. És még akkor is csak akkor szeretné látni az átlagárat, ha több mint 10,00 usd.
Az első feltételt egy WHERE
záradékkal hozhatja létre, amely az átlagárak kiszámítása előtt elvet minden olyan közzétevőt, amely nem Kaliforniában található. A második feltételhez HAVING
záradék szükséges, mert a feltétel az adatok csoportosításának és összegzésének eredményein alapul. Az eredményként kapott SQL-utasítás a következőképpen nézhet ki:
SELECT titles.pub_id, AVG(titles.price)
FROM titles INNER JOIN publishers
ON titles.pub_id = publishers.pub_id
WHERE publishers.state = 'CA'
GROUP BY titles.pub_id
HAVING AVG(price) > 10;
Az SQL Server Management Studio Visual Database Tools eszközében HAVING
és WHERE
záradékokat is létrehozhat a Feltételek panelen. Alapértelmezés szerint, ha keresési feltételt ad meg egy oszlophoz, a feltétel a HAVING
záradék részévé válik. A feltételt azonban módosíthatja WHERE
záradékként.
Létrehozhat egy WHERE
záradékot és HAVING
záradékot, amely ugyanazt az oszlopot foglalja magában. Ehhez szükséges kétszer hozzáadni az oszlopot a Feltételek panelhez, majd az egyik esetet a HAVING
záradék részeként, a másik esetet pedig a WHERE
záradék részeként megadni.
WHERE feltétel megadása összesítő lekérdezésben
Adja meg a lekérdezés csoportjait. Részletekért lásd a Csoportsorok a lekérdezési eredményekben (Visual Database Tools).
Ha még nem szerepel a Feltétel panelen, adja hozzá azt az oszlopot, amelyre a
WHERE
feltételt szeretné alapozni.Törölje a Kimeneti oszlopot, kivéve, ha az adatoszlop a GROUP BY záradék része vagy egy összesítő függvény része.
A Szűrő oszlopban adja meg a
WHERE
feltételt. A Lekérdezés- és nézettervező hozzáadja a feltételt az SQL-utasításHAVING
záradékához.Jegyzet
Az eljárás példájában látható lekérdezés két táblát illeszt össze,
titles
éspublishers
.A lekérdezés ezen pontján az SQL-utasítás egy
HAVING
záradékot tartalmaz:SELECT titles.pub_id, AVG(titles.price) FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_id GROUP BY titles.pub_id HAVING publishers.state = 'CA'
A Csoportosítás oszlopban válassza a Hol lehetőséget a csoport és összegzési beállítások listájából. A Lekérdezés- és nézettervező eltávolítja a feltételt az SQL-utasítás
HAVING
záradékából, és hozzáadja aWHERE
záradékhoz.Az SQL-utasítás ehelyett egy
WHERE
záradékot tartalmaz:SELECT titles.pub_id, AVG(titles.price) FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_id WHERE publishers.state = 'CA' GROUP BY titles.pub_id;