Количество групп и подгрупп
Я работаю с SQL Server 2008. Есть таблица с проектами, их статусом и датой:
ID Status Date
1 Gone 21-10-2011
2 Cancelled 01-10-2011
3 Won 02-10-2011
4 Won 07-10-2011
5 Gone 02-01-2010
6 Won 24-01-2010
Для статистических целей мне нужен некоторый запрос T-SQL, который в результате вернет таблицу, подобную этой:
Month Year Total Lost Won
10 2011 4 2 2
01 2010 2 1 1
Где:
Total - общее количество записей для уникальной пары месяц-год.
Lost означает общее количество записей для уникальной пары месяц-год со статусом "пропал" или "отменен"
Won означает общее количество записей для уникальной пары месяц-год со статусом - Выиграл.
Я понимаю, как можно получить общую сумму за уникальный месяц-год,но не знаю, как добавить в результирующий набор потерянные и выигранные столбцы и получить сумму записей. И конечно, если для пары месяц-год нет ни одного "выигранного" проекта, а только "проигранный", то для столбца выигранное значение должно быть равно 0.
1 ответ:
SELECT MONTH([Date]) [Month], YEAR([Date]) [Year], COUNT(*) [Total], COUNT(CASE WHEN Status IN ('Gone', 'Cancelled') THEN 1 END) [Lost], COUNT(CASE WHEN Status= 'Won' THEN 1 END) [Won] FROM MyTable GROUP BY MONTH([Date]), YEAR([Date])
Это работает, потому что молчащий ELSE в случае дает NULL, и COUNT проигнорирует это