Sdílet prostřednictvím


Jak: použití s a kde doložek v jednom dotazu

V některých případech můžete chtít před použitím podmínky pro skupiny jako celku (pomocí klauzule HAVING) vyloučit jednotlivé řádky ze skupin (pomocí klauzule WHERE).

Klauzule HAVING je podobně jako klauzule WHERE, ale platí pouze pro skupiny jako celku (která je na řádky sady výsledků reprezentující skupiny), že klauzule WHERE se používá pro jednotlivé řádky.Dotaz může obsahovat klauzuli WHERE a klauzule HAVING.V takovém případě:

  • Jednotlivé řádky v tabulkách nebo objekty založené na hodnotách tabulky v podokně Diagram je nejprve použita klauzule WHERE.Seskupeny jsou pouze řádky, které splňují podmínky klauzule WHERE.

  • Následně je použita klauzule HAVING řádků sady výsledků.Pouze skupiny, které splňují klauzule HAVING se podmínky ve výstupu dotazu.Klauzuli HAVING lze použít pouze pro sloupce, které se objeví rovněž v klauzuli GROUP by nebo v agregační funkci.

Představte si například, že se připojíte titles a publishers tabulek k vytvoření dotazu, který zobrazuje průměrnou cenu knih pro sadu vydavatelů.Chcete zobrazit průměrnou cenu pro konkrétní sadu vydavatelů – možná pouze vydavatelů ve státu Kalifornie.A dokonce ani pak chcete zobrazit průměrnou cenu pouze v případě, že je přes $10,00.

První podmínku lze definovat pomocí klauzule WHERE, která vyloučí všechny vydavatele, které nejsou v Kalifornii, před výpočtem průměrné ceny.Protože je založena na výsledcích seskupení a sumarizace dat, vyžaduje druhou podmínku klauzule HAVING.Výsledný příkaz SQL může vypadat například takto:

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

Můžete vytvořit i HAVING a klauzulí WHERE v okně kritérií.Ve výchozím nastavení zadáte-li podmínku vyhledávání pro sloupec, podmínka stane součástí klauzule HAVING.Můžete však změnit zadanou podmínku klauzule WHERE.

Lze vytvořit klauzule WHERE a klauzule HAVING zahrnující stejný sloupec.Provedete to tak, přidejte sloupec dvakrát do okna kritérií pak zadejte jednu instanci jako součást klauzule HAVING a druhou jako součást klauzule WHERE.

[!POZNÁMKA]

Ve vašem počítači se pro některé z prvků uživatelského rozhraní sady Visual Studio mohou zobrazit jiné názvy a umístění, než jsou uvedeny v následujících pokynech. Tyto prvky jsou určeny verzí aplikace Visual Studio a použitým nastavením. Další informace naleznete v tématu Nastavení aplikace Visual Studio.

Zadání podmínky WHERE v agregačním dotazu

  1. Určení skupiny dotazu.Další informace naleznete v tématu Jak: seskupení řádků ve výsledcích dotazu.

  2. Pokud již není v okně kritérií, přidáte sloupec, na kterém chcete podmínku WHERE.

  3. Vymazat Výstup sloupec není datový sloupec součástí klauzule GROUP by nebo v agregační funkci zahrnuty.

  4. V Filtr sloupec, zadejte podmínku WHERE.Dotaz a Návrhář zobrazení přidá podmínku do příkazu SQL klauzuli HAVING.

    [!POZNÁMKA]

    Ukazuje příklad této procedury spojuje dvě tabulky dotazu titles a publishers.

    V tomto okamžiku v dotazu příkaz SQL obsahuje klauzuli HAVING:

    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'
    
  5. V Group sloupce vyberte kde ze seznamu možností seskupení a shrnutí.Dotaz a Návrhář zobrazení odebere podmínku z klauzule HAVING v příkazu SQL a přidá do klauzule WHERE.

    Změny příkaz SQL obsahuje klauzuli místo:

    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
    

Viz také

Další zdroje

Řazení a seskupování výsledků dotazu

Shrnutí výsledků dotazu