У меня следующий запрос, я хотел бы также суммировать значение NULL. Некоторые TimeSheet не записывают в TimeRecord, а некоторые tr.TimeIn и tr.TimeOut имеют значение NULL.
В запросе выбирается только расписание, в котором есть записи в TimeRecord. Как я могу выбрать все, и суммировать значение NULL, а также. Таким образом, сумма NULL будет равна нулю.
Таблица отношений:
- Ученик 1: N TimeSheet (FK StudentId)
- Расписание 1: N TimeRecord (FK TimeSheetId)
TimeIn и TimeOut имеют тип DateTime и могут иметь значение null.
Запрос 1: Ежемесячный отчет:
Dim query = From ts In db.TimeSheets _
Join tr In db.TimeRecords On tr.TimeSheetId Equals ts.TimeSheetId _
Where ts.IsArchive = False And ts.IsCompleted = False And tr.TimeOut IsNot Nothing _
Group By key = New With {ts.Student, .MonthYear = (tr.TimeOut.Value.Month & "/" & tr.TimeOut.Value.Year)} Into TotalHour = Sum(DateDiffSecond(tr.TimeIn, tr.TimeOut)) _
Select key.Student.StudentId, key.Student.AssignedId, key.MonthYear, TotalHour
Запрос 2: Общее время записи для ученика с активным расписанием:
Dim query = From ts In db.TimeSheets _
Join tr In db.TimeRecords On tr.TimeSheetId Equals ts.TimeSheetId _
Where ts.IsArchive = False And ts.IsCompleted = False _
Group By ts.StudentId, tr.TimeSheetId Into TotalTime = Sum(DateDiffSecond(tr.TimeIn, tr.TimeOut)) _
Select StudentId, TimeSheetId, TotalTime
Вот результат запроса 2:
- 734 - 159: 9 часов 35 мм 28 секунд
- 2655 - 160: 93 часа 33 мм 50 секунд
- 1566 - 161: 37 ч. 23 мм 53 с.
- 3114 - 162: 25 часов 0 мм 21 секунда
Требуемый результат запроса 2:
- 733 - 158: 0 ч. 0 мм 0 с
- 734 - 159: 9 часов 35 мм 28 секунд
- 736 - 169: 0 часов 0 мм 0 секунд
- 2655 - 160: 93 часа 33 мм 50 секунд
- 1566 - 161: 37 ч. 23 мм. 53 с.
- 3114 - 162: 25 часов 0 мм 21 с
То же самое для запроса 1, но он составляет ежемесячный отчет.