Я собираюсь предположить, что вас интересует не только март и апрель, и что вам действительно нужен ежемесячный сводный итог, каждый в отдельной колонке. Поскольку вы используете SQL Server 2005, вы можете сделать это с dynamic PIVOT
. Следующий код протестирован и должен возвращать вам итоги за каждый месяц в отдельном столбце. Я также добавил год, если вы используете данные за несколько лет. Вы можете изменить заголовки столбцов, изменив сгенерированную строку даты, хотя вы должны позаботиться о том, чтобы сделать их уникальными и соответствовать требуемой группировке столбцов:
CREATE TABLE ##Tab (date_from datetime, available int)
INSERT INTO ##Tab (date_from, available) VALUES ('3/1/2011', 5)
INSERT INTO ##Tab (date_from, available) VALUES('3/6/2011', 6)
INSERT INTO ##Tab (date_from, available) VALUES('3/25/2011', 7)
INSERT INTO ##Tab (date_from, available) VALUES('4/14/2011', 9)
INSERT INTO ##Tab (date_from, available) VALUES('4/20/2011', 10)
DECLARE @month_year varchar(2000)
SELECT @month_year = STUFF(
( SELECT DISTINCT '],[' + CAST(datepart(mm, date_from) AS varchar) +
'/' + CAST(datepart(yy, date_from) AS varchar)
FROM ##Tab
ORDER BY '],[' + CAST(datepart(mm, date_from) AS varchar) +
'/' + CAST(datepart(yy, date_from) AS varchar)
FOR XML PATH('')
), 1, 2, '') + ']'
DECLARE @dyn_pivot nvarchar(max)
SET @dyn_pivot =
N'
SELECT *
FROM
(
SELECT CAST(datepart(mm, date_from) AS varchar) + ''/'' + CAST(datepart(yy, date_from) AS varchar) dt, SUM(available) AS available
FROM ##Tab
GROUP BY CAST(datepart(mm, date_from) AS varchar) + ''/'' + CAST(datepart(yy, date_from) AS varchar)
) AS SourceTable
PIVOT
(
AVG(available)
FOR dt IN (' + @month_year + N')
) AS PivotTable
'
EXEC (@dyn_pivot)