602SQL-Úplná dokumentace Index  

Sbírka dotazů – str. 15

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í.