Для заказа по месяцам используйте:
ORDER BY DATEPART(Month,Created) ASC
DatePart()
возвращает целое число для части, указанной 1 для января, 2 для февраля и т. Д.
Вам может помочь SQL с функциями COALESCE () и ISNULL (). Это так же, как ваш первый выбор:
SELECT
COALESCE(tmpActivity.Year,tmpCreated.Year,tmpContactsCreated.Year) as Year,
COALESCE(tmpActivity.Month,tmpCreated.Month,tmpContactsCreated.Month) as Month,
ISNULL(tmpActivity.ActiveAccounts,0) AS ActiveAccounts,
ISNULL(tmpCreated.NewAccounts,0) AS NewAccounts,
ISNULL(tmpContactsCreated.NewContacts,0) AS NewContacts
Я думаю, что в вашем выборе есть ошибка, я думаю, что ваша последняя строка должна быть такой:
) as tmpContactsCreated ON (tmpContactsCreated.Year = tmpCreated.Year AND tmpContactsCreated.Month = tmpCreated.Month) OR
(tmpContactsCreated.Year = tmpActivity.Year AND tmpContactsCreated.Month = tmpActivity.Month)
Но я должен проверить это, чтобы быть уверенным.
Добавление в свертку трудно сделать - обычно это делается внешне для SQL в элементе управления или для отображения результатов. Вы могли бы сделать что-то вроде этого (надуманный пример):
SELECT 1 as reportOrder, date, amount, null as total
FROM invoices
UNION ALL
SELECT 2 , null, null, sum(amount)
FROM invoices
ORDER BY reportOrder, date
или вы не можете иметь «дополнительный» столбец итогов и поместить его в столбец суммы.