Количество групп и подгрупп


Я работаю с 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   2  

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 проигнорирует это