SUM(CASE Основа WHEN 'Овощи' THEN 1 ELSE 0 END) Овощи
, SUM(CASE Основа WHEN 'Мясо' THEN 1 ELSE 0 END) Мясо
, SUM(CASE Основа WHEN 'Рыба' THEN 1 ELSE 0 END) Рыба
,SUM(CASE Основа WHEN 'Молоко' THEN 1 ELSE 0 END) Молоко ,SUM(CASE Основа WHEN 'Яйца' THEN 1 ELSE 0 END) Яйца
,SUM(CASE Основа WHEN 'Крупа' THEN 1 ELSE 0 END) Крупа
,SUM(CASE Основа WHEN 'Фрукты' THEN 1 ELSE 0 END) Фрукты ,SUM(CASE Основа WHEN 'Кофе' THEN 1 ELSE 0 END) Кофе
FROM Блюда b JOIN Справочник_вид_блюда s ON b. Вид = s.ID_ Вид
GROUP BY s. Вид;
Где опреатор Case имеет следующий синтаксис:
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
input_expression —представляет собой любое допустимое выражение.
WHEN when_expression — простое выражение, с которым сравнивается аргумент input_expression. Типы данных аргумента input_expression и каждого из выражений when_expression должны быть одинаковыми или неявно приводимыми друг к другу.
THEN result_expression — выражение, возвращаемое, если сравнение выражений input_expression и when_expression дает в результате TRUE или выражение Аргумент result expression представляет собой любое допустимое выражение.
ELSE else_result_expression —выражение, возвращаемое, если ни одна из операций сравнения не дает в результате TRUE. Если этот аргумент опущен и ни одна из операций сравнения не дает в результате TRUE, функция CASE возвращает NULL. Аргумент else_result_expression представляет собой любое допустимое выражение. Типы данных аргумента else_result_expression и любого из аргументов result_expression должны быть одинаковыми или неявно приводимыми друг к другу.
Как следует из названия оператора, UNPIVOT выполняет обратную по отношению к PIVOT операцию, т.е. представляет данные, записанные в строке таблицы, в одном столбце.
Пусть мы получили следующий результат, ограничив вывод Вид = ‘Горячее’
Вид
Овощи
Мясо
Рыба
Молоко
Яйца
Крупа
Фрукты
Кофе
Горячее
Развернуть эту таблицу в столбец мы можем следующим запросом