Как реализовать в запросе сумму по разнице времени, при чем только для инцидентов по данному сервису, к примеру, в часах?
Это может быть полезным при формировании запроса для отчета FastReport.
Для этого можно использовать DATEDIFF. Пример запроса в MSSQL:
SELECT
[tbl_Incident].[ID] AS [ID],
[tbl_Incident].[IncidentNumber] AS [IncidentNumber],
[tbl_Incident].[ActualDueDate] AS [ActualDueDate],
[tbl_Incident].[Date] AS [Date],
[tbl_Incident].[ITServiceID] AS [ITServiceID],
[tbl_ITService].[Name] AS [ITServiceName],
DATEDIFF(hh, [tbl_Incident].[CreatedOn], [tbl_Incident].[ActualDueDate]) AS [HoursDuration],
(SELECT
DATEDIFF(hh, [tbl_Incident2].[Date], [tbl_Incident2].[ActualDueDate]) AS [Time]
FROM
[dbo].[tbl_Incident] AS [tbl_Incident2]
WHERE([tbl_Incident].[ITServiceID] = [tbl_Incident2].[ITServiceID])) AS [Sum]
FROM
[dbo].[tbl_Incident] AS [tbl_Incident]
LEFT OUTER JOIN
[dbo].[tbl_ITService] AS [tbl_ITService] ON [tbl_ITService].[ID] = [tbl_Incident].[ITServiceID]
Как реализовать подобный запрос в Terrasoft?
1. Создаем колонку подзапроса:
2. Указываем в блоке FROM колонки подзапроса таблицу, откуда выбираем, и алиас таблицы:
3. В блоке Select колонки подзапроса создаем новую колонку типа CustomSQLColumn
4. Настраиваем ее следующим образом:
5. В блоке WHERE колонки подзапроса создаем фильтр сравнения:
6. Фильтр настраиваем следующим образом:
7. В колонке Subquery указать суммирование:
В результате для инцидентов, у которых в карточке заполнен сервис мы получим сумму затраченного на решение времени в часах для всех инцидентов по данному сервису.