Я начинаю с SQL, создавая хранимую процедуру с целью определения заданного интервала времени и интервала и возвращаю данные в пределах этого временного диапазона, сгруппированного по интервалу. Например, ввод двухнедельного интервала времени и 2-дневного интервала даст 7 точек данных производительности.Использование DatePart внутри оператора case switch
Для создания групп я использую корпус коммутатора для единицы интервала и datepart, чтобы извлечь ее для группировки. Однако моя процедура не будет компилироваться. Вот мой код:
declare @interval int
declare @unit varchar(6)
set @interval=1
set @unit='year'
select
case @unit
when 'year' then datepart(year, CreateDate)/@interval*@interval
when 'month' then datepart(month, CreateDate)/@interval*@interval
when 'week' then datepart(week, CreateDate)/@interval*@interval
when 'day' then datepart(day, CreateDate)/@interval*@interval
when 'hour' then datepart(hour, CreateDate)/@interval*@interval
when 'minute' then datepart(minute, CreateDate)/@interval*@interval
when 'second' then datepart(second, CreateDate)/@interval*@interval
end
from OrderInfoCustom
group by
case @unit
when 'year' then datepart(year, CreateDate)/@interval
when 'month' then datepart(month, CreateDate)/@interval
when 'week' then datepart(week, CreateDate)/@interval
when 'day' then datepart(day, CreateDate)/@interval
when 'hour' then datepart(hour, CreateDate)/@interval
when 'minute' then datepart(minute, CreateDate)/@interval
when 'second' then datepart(second, CreateDate)/@interval
end
Это отказывается компилировать, давая эту ошибку (несколько раз):
Msg 8120, уровень 16, состояние 1, строка 7 Колонка 'OrderInfoCustom.CreateDate' является недействителен в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY .
Похоже, что компилятор не признает, что CreateDate является частью агрегатной функции, поскольку он находится в коммутационном футляре? Я не уверен.
EDIT: Я должен включать в себя я на Microsoft SQL Server 2005.
Ах, да. Извините за глупые вопросы. Спасибо, ваша помощь была высоко оценена. – disambiguator