Вы не можете расширить свой запрос дополнительными столбцами, чтобы включить новые месяцы, не получая мусора. Сделайте это в электронной таблице или в другом месте.
Попробуйте это как ваш запрос.
Он не имеет точного формата, поскольку показывает результаты в виде строк, а не столбцов, но он будет работать для всех месяцев и будущих месяцев.
Я заменил 30 на точное количество дней в месяце, также он показывает 2 цифры вместо результата, который всегда округляется в меньшую сторону.
я решил показать вам 2 разных способа отображения месяца и года в результате
SELECT animal_code, SUM(isnull(calve_milk,0) + isnull(morning,0) + isnull(evening,0)) /
-- this replaces your 30
cast(datediff(day, dateadd(month, datediff(month, 0, m_date), 0), dateadd(month, datediff(month, 0, m_date) + 1, 0)) as decimal(9,2))
AS average_milk_per_day,
--this will give you a varcharcolumn showing month and year
stuff(convert(varchar(11), dateadd(month,datediff(month, 0, m_date), 0), 100)
, 4,3,'') monthyear,
--this will give you the month and year as a datetime
dateadd(month, datediff(month, 0, m_date),0) monthyear_as_date
FROM dbo.Status AS Status_1
WHERE m_date >= '2011-01-09'
GROUP BY animal_code,
datediff(month, 0, m_date)
ORDER BY datediff(month, 0, m_date), animal_code
Результат за текущий месяц будет ниже, пока все данные не будут зарегистрированы. Если вам нужно, чтобы он рассчитывался только для зарегистрированных дней, а не для целых месяцев, дайте мне знать, и я снова настрою запрос.