Как суммировать дату и время в динамическом стержне и представлять его в формате ЧЧ: ММ: СС - PullRequest
0 голосов
/ 12 апреля 2019

Итак, моя цель - настроить процедуру для последующего использования в приложении vb.net, для этой процедуры необходимо получить текст тега (строки) и имя ассоциации (столбца), а также суммировать время между обе таблицы ввода (нужна только помощь с форматированием даты и времени).

В настоящее время оно показывает время в секундах, и я хочу, чтобы оно отображалось в формате ЧЧ: ММ: СС.

Пример таблицы данных https://dbfiddle.uk/?rdbms=sqlserver_2012&fiddle=9c9c01fb1bdfe75929679114d8d7e799

DECLARE @col VARCHAR(MAX)
DECLARE @sql VARCHAR(MAX)

SELECT @col = COALESCE(@col + ', ','') + QUOTENAME(NomeE)

FROM dbo.Emprensa as E GROUP BY E.NomeE  

SELECT @col 

SET @sql = '
select  Texto,' + @col + '
from  (select  E.NomeE, T.Texto, datediff(second, En.StartT,En.EndT ) as secs 
       from dbo.Emprensa as E 
  inner join dbo.Entry as En on E.IDEmp = En.IDEmp
  inner join dbo.Tag as T on T.IDTag = En.IDTag)p

PIVOT( sum(secs)  FOR NomeE IN ( ' + @col + ' )) AS pvt

 order by Texto
 '
PRINT @sql
EXEC (@sql)

600 хочу показать 00: 10: 00

4200 хочу, чтобы он показывал 01: 10: 00

1 Ответ

0 голосов
/ 12 апреля 2019

Полное слепое предположение, поскольку нет данных выборки, однако, при условии , что мое предположение о синтаксисе верное и что оно не может продолжаться более 24 часов:

DECLARE @col nvarchar(MAX);
DECLARE @coltime nvarchar(MAX);
DECLARE @sql nvarchar(MAX);

SELECT @col = COALESCE(@col + N', ',N'') + QUOTENAME(NomeE)
FROM dbo.Emprensa as E
GROUP BY E.NomeE;

SELECT @coltime = COALESCE(@col + N', ',N'') + N'DATEADD(SECOND,' + QUOTENAME(NomeE) + N',CONVERT(time,''00:00:00'')'
FROM dbo.Emprensa as E
GROUP BY E.NomeE;


SET @sql = N'
SELECT Texto,' + @coltime + N'
FROM (SELECT E.NomeE, T.Texto, datediff(second, En.StartT,En.EndT ) as secs 
      FROM dbo.Emprensa as E 
           INNER JOIN dbo.Entry as En on E.IDEmp = En.IDEmp
           INNER JOIN dbo.Tag as T on T.IDTag = En.IDTag)p

PIVOT( SUM(secs)  FOR NomeE IN ( N' + @col + N')) AS pvt
order by Texto';

PRINT @sql
EXEC sp_executesql @sql;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...