Я бы решил решить эту проблему с помощью временных таблиц.Первая таблица, #DataIn, должна содержать результат вашего запроса, как показано в вашей таблице.
SELECT [Agreement_no]
,[Total_Time]
,[Officer_name]
,[Sp/Tt/by_Of]
,CAST(REPLACE([Sp Tt for], ' sec', '') AS decimal(4,2)) AS [Sp/Tt/for l- pros]
INTO #test1
FROM #DataIn;
Чтобы получить данные в #DataIn, вы должны изменить свой запрос, используя:
SELECT … INTO #DataIn …
В моем запросе REPLACE - удалить 'sec' из [Sp / Tt / for l-pros], а CAST - преобразовать значения в десятичные значения.Ваши данные (в # Test1) теперь выглядят так:
Agreement_no Total_Time Officer_name Sp/Tt/by_Of Sp/Tt/for l- pros
999Li74 0:18:19 'Mr.Jason' 0:02:00 0.40
999Li74 0:18:19 'Mr.Jason' 0:02:00 0.25
999Li74 0:18:19 'Mr.Jason' 0:02:00 0.40
999Li74 0:18:19 'Mr.Jason' 0:02:00 0.15
999Li74 0:18:19 'Mr.Firdovsi' 0:16:19 0.42
999Li74 0:18:19 'Mr.Firdovsi' 0:16:19 0.20
999Li74 0:18:19 'Mr.Firdovsi' 0:16:19 1.2
999Li74 0:18:19 'Mr.Firdovsi' 0:16:19 11.1
999Li74 0:18:19 'Mr.Firdovsi' 0:16:19 3.1
999Li74 0:18:19 'Mr.Firdovsi' 0:16:19 0.13
Теперь вы можете SUM столбец [Sp / Tt / для l-профи] на имя офицера:
SELECT [Agreement_no]
,[Total_Time]
,[Officer_name]
,[Sp/Tt/by_Of]
,CONVERT(varchar, DATEADD(ms, SUM ([Sp/Tt/for l- pros]) * 1000, 0), 114) AS [Sp/Tt/for l- pros]
FROM #test1
GROUP BY [Officer_name], [Agreement_no], [Total_Time], [Sp/Tt/by_Of];
DATEADD вэтот запрос используется для отображения результирующего значения как времени.Для этого я вычислю время в миллисекундах (умножив значения в секундах на 1000).Результат этого запроса:
Agreement_no Total_Time Officer_name Sp/Tt/by_Of Sp/Tt/for l- pros
999Li74 0:18:19 'Mr.Firdovsi' 0:16:19 00:00:16:150
999Li74 0:18:19 'Mr.Jason' 0:02:00 00:00:01:200
С уважением, Пол