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
WHEREzá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 aWHEREzáradék feltételeinek megfelelő sorok vannak csoportosítva.A
HAVINGzáradék ezután az eredményhalmaz soraira lesz alkalmazva. A lekérdezés kimenetében csak azok a csoportok jelennek meg, amelyek megfelelnek aHAVINGfeltételeknek. ZáradékotHAVINGcsak olyan oszlopokra alkalmazhat, amelyek a záradékban vagy azGROUP BYö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
WHEREfeltételt szeretné alapozni.Törölje a Kimenet oszlopot, ha az adatoszlop nem része a
GROUP BYzáradéknak, vagy nem szerepel egy összesítő függvényben.A Szűrő oszlopban adja meg a
WHEREfeltételt. A Lekérdezés- és nézettervező hozzáadja a feltételt az SQL-utasításHAVINGzá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
HAVINGzá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
HAVINGzáradékából, és hozzáadja aWHEREzáradékhoz.Az SQL-utasítás ehelyett egy
WHEREzá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;