#sql #sql-server
Вопрос:
У меня есть таблица с несколькими рабочими неделями, именами продуктов и именами событий. Вот пример:
work_week product_name event_name num_products attributeA attributeB
2021-17 A Event1 25 Y X
2021-17 A Event1 20 Y Z
2021-17 A Event1 15 N Y
Я пытаюсь выполнить «группировку по» в этой таблице, чтобы получить сумму num_products, сгруппированных по work_week, product_name и event_name. Однако в моей таблице «группировка по» мне нужно несколько версий sum(num_products) в зависимости от значений attributeA и attributeB. Что-то вроде этого:
work_week product_name event_name sum_when_A = N sum_when_A = Y and B = Z
2021-17 A Event1 15 20
Есть какие-нибудь идеи о том, как это выполнить?
Ответ №1:
Просто используйте условную агрегацию:
select work_week, product_name, event_name,
sum(case when attributeA = 'N' then num_products else 0 end) as sum_n,
sum(case when attributeA = 'Y' and attributeB = 'Z' then num_products else 0 end) as num_yz
from t
group by work_week, product_name, event_name;
Комментарии:
1. ах, «случай, когда» в пределах самой суммы. Вот и все, спасибо
Ответ №2:
Используйте условную агрегацию
select work_week, product_name, event_name
, sum(iif(attributeA = 'N', num_products, 0))
, sum(iif(attributeA = 'Y' and attributeB = 'Z', num_products, 0))
from myTable
group by work_week, product_name, event_name