|
![]() | Strana 14 (INTERSECT, EXCEPT) | ![]() | Sbírka příkladů SQL dotazů | Strana 16 (LIMIT) | ![]() |
Příklad 23
Zadání: Zjistěte, kolik faktur bylo došlých a kolik odeslaných.
Popis řešení: Takto jednoduchý dotaz se zdá nebýti hoden umístění na konci sbírky příkladů. Opravdu, dotaz
SELECT Count(druh)
FROM Faktury
GROUP BY druh
zvládne každý. Výsledkem je jeden sloupec nadepsaný Druh se dvěma řádky pro dva typu faktur. My ale chceme, aby výsledek tvořil jeden řádek se dvěma sloupci, nadepsanými Došlé a Odeslané!!
Podívejte se na následující dotaz:
SQL:
SELECT SUM(CASE WHEN druh=1 THEN 1 ELSE 0 END) AS Došlé,
SUM(CASE WHEN druh=2 THEN 1 ELSE 0 END) AS Odeslané
FROM Faktury
V dotazu je použito agregační funkce bez GROUP BY - odpověď tedy bude mít jeden záznam. V části SELECT jsou dva výrazy, odpověď tedy bude mít dva sloupce. Ve výrazu je použito podmíněného výrazu CASE, který fakturu jednoho typu nahrazuje jedničkou a druhého typu nulou. Pak stačí tyto jedničky sečíst agregační funkcí.
![]() | Strana 14 (INTERSECT, EXCEPT) | ![]() | Sbírka příkladů SQL dotazů | Strana 16 (LIMIT) | ![]() |