Публикация

Сумма по разнице времени в запросе

Как реализовать в запросе сумму по разнице времени, при чем только для инцидентов по данному сервису, к примеру, в часах?

Это может быть полезным при формировании запроса для отчета 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. Создаем колонку подзапроса:

111

2. Указываем в блоке FROM колонки подзапроса таблицу, откуда выбираем, и алиас таблицы:

111

3. В блоке Select колонки подзапроса создаем новую колонку типа CustomSQLColumn

111

4. Настраиваем ее следующим образом:

111

5. В блоке WHERE колонки подзапроса создаем фильтр сравнения:

111

6. Фильтр настраиваем следующим образом:

111

7. В колонке Subquery указать суммирование:

111

В результате для инцидентов, у которых в карточке заполнен сервис мы получим сумму затраченного на решение времени в часах для всех инцидентов по данному сервису.

Нравится

Поделиться

0 комментариев
Показать все комментарии