У меня есть таблица, назовем ее My_Table
, в которой есть Created
столбец даты и времени (в SQL Server), и я пытаюсь получить отчет, в котором исторически показано, сколько строк было My_Table
за месяц за месяц.конкретное время.Теперь я знаю, что могу показать, сколько добавляется каждый месяц с:
SELECT YEAR(MT.Created), MONTH(MT.Created), COUNT(*) AS [Total Added]
FROM My_Table MT
GROUP BY YEAR(MT.Created), MONTH(MT.Created)
ORDER BY YEAR(MT.Created), MONTH(MT.Created)
, что будет возвращать что-то вроде:
YEAR MONTH Total Added
-----------------------------
2009 01 25
2009 02 127
2009 03 241
Однако я хочуполучить общий размер списка за указанный период (назовите его как хотите; промежуточный итог, накопленная сумма, исторический отчет):
YEAR MONTH Total Size
-----------------------------
-- 2008 12 325
2009 01 350
2009 02 477
2009 03 718
Я пытаюсь это:
SELECT YEAR(MT.Created)
, MONTH(MT.Created)
,(
SELECT COUNT(*) FROM My_Table MT_int
WHERE MT_int.Created BETWEEN
CAST('2009/01/01' AS datetime)
AND DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,MT.Created)+1,0))
-- the last day of the current month
-- (Additional conditions can go here)
) AS [Total added this month]
FROM My_Table MT
WHERE MT.Created > CAST('2009/01/01' AS datetime)
GROUP BY YEAR(MT.Created), MONTH(MT.Created)
ORDER BY YEAR(MT.Created), MONTH(MT.Created)
Однако SQL Server отвечает этой ошибкой:
Msg 8120, Level 16, State 1, Line 1
Column 'My_Table .Created' is invalid in the select list because
it is not contained in either an aggregate function or the GROUP BY clause.
Я просто знаю Я упускаю что-то очевидное, но после того, как ушел и пришелназад и глядя на него некоторое время, я в растерянности.Поэтому, если бы кто-то был так любезен, чтобы указать на то, что на земле я здесь упускаю (или укажите мне лучший способ сделать это), я был бы вечно благодарен.