Таким образом, в основном после создания представления с помощью оператора case. Я хочу добавить предложение group by в текущем представлении ниже. как мне это сделать? пример оператора group by и пример case ниже
Вид с оператором case, который работает:
Create View v_ClassroomOccupancyJulytest
AS
Select
ro.[RoomCode],
ro.[RoomName],
ro.[DeviceID],
ro.[Temperature],
ro.[LocalTime],
ctt.[DAY],
ctt.[DATETIME],
ctt.[DURATION],
CASE
WHEN (ro.LocalTime BETWEEN ctt.CLASSSTARTDATE AND ctt.CLASSENDDATE)
AND ro.Occupancy = 1 THEN 'Booked And Occupied'
WHEN (ro.LocalTime NOT BETWEEN ctt.CLASSSTARTDATE AND ctt.CLASSENDDATE ) or ctt.CLASSSTARTDATE IS NULL and ctt.CLASSENDDATE IS NULL
AND ro.Occupancy = 1 THEN 'Not Booked but Occupied'
WHEN (ro.LocalTime BETWEEN ctt.CLASSSTARTDATE AND ctt.CLASSENDDATE)
AND ro.Occupancy = 0 THEN 'Booked but Not Occupied'
ELSE 'Not booked and Not Occupied'
END AS ClassroomStatus
FROM V_RoomOccupancyJuly ro
left outer JOIN ClassTimeTable ctt
ON ro.RoomCode = ctt.ROOMID and (ro.LocalTime BETWEEN ctt.CLASSSTARTDATE AND ctt.CLASSENDDATE)
Я хочу использовать group by для группировки строк на основе [roomcode]
, [datetime]
30-минутный интервал и sum([occupancy])/3
.
Я запустил представление создания с приведенным ниже кодом предложения group by
, и оно возвращает ошибку:
Невозможно использоватьагрегат или подзапрос в выражении, используемом для группы по списку предложения GROUP BY
пример группы по
GROUP BY [RoomCode],
SUM([OCCUPANCY])/3,
DATEPART(YEAR[DATETIME]),
DATEPART(MONTH[DATETIME]),
DATEPART(DAY[DATETIME]),
DATEPART(HOUR[DATETIME]),
DATEPART(MINUTE[DATETIME])/30,
Почему sum([occupancy])/3
? потому что каждые 30 минут есть 3 строки, следовательно, 3 занятия.
После выполнения предложения group by можно ли сделать оператор case на основе sum([occupancy])/3
CaseВот так:
CASE
WHEN (SUM([OCCUPANCU])/3)>0 THEN '1'
ELSE '0'
END AS 1/2HrOccupancy
Вот чего я хочу достичь:
Пример источника данных: https://imgur.com/yEDUOv9
Чего я хочу достичь: https://imgur.com/SIPoTlC
логика, лежащая в основе [occupancy]
, заключается в том, что если любое значение в 3 строках (поскольку они сгруппированы с интервалом 30 минут) равно 1, значение занятости = 1если все значения равны 0, то [occupancy]
значение равно = 0.
Что касается `[LocalTime] ', для которого я хочу использовать его для группировки, я также хочу, чтобы оно округлялось до ближайших 30минутпример 2:30, 3:00, 3:30
Что касается значения [temperature]
, я хочу найти среднее значение. возможно используя avg ()
Что касается [roomname]
, [deviceid]
, [weekno]
, [day]
, [classstartdate]
и [classenddate]
, просто используйте существующее значение, которое является значением3 ряда