Я пытаюсь получить SUM из 2 или более полей TIME в моей таблице PIVOT, однако, поскольку SUM не работает с символами (конвертируется так, что я могу показать EstimatedTime/ActualTime) m с трудом.SQL SUM в PIVOT, который использует MAX
Код ниже -
DECLARE @cols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT distinct ',' + ID + ',' + QUOTENAME(Name)
FROM JobPhases
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
, 1, 1, '');
SELECT @query = 'SELECT * FROM
(
SELECT j.JobID, c.Registration as ''Reg.'', p.Name,
CAST(MAX(j.EstimatedTime) as VARCHAR(MAX)) + ''/'' +
CAST(MAX(j.ActualTime) as VARCHAR(MAX)) as [x]
FROM JobDetails AS j
INNER JOIN JobPhases p ON p.ID = j.PhaseId
INNER JOIN Jobs job on job.ID = j.JobID
INNER JOIN Cars c on job.CarID = c.ID
WHERE (job.Status = 1 or job.Status = 0)
GROUP BY c.Registration, p.Name, j.JobID
) JobDetails
PIVOT
( MAX(x)
FOR Name IN (' + @cols + ')
) pvt'
execute(@query);
Формирует -
JobID | Reg. | P13$ | Repair and Reshape | P15$ | Refit Stripped Parts
1065 | BJ11 2VT | NULL | 01:00:00.0000000/01:54:10.5387526 | NULL | NULL
Таблицы -
**JobDetails**
ID - PK Auto increment
JobID - Int (Joined to Jobs table)
PhaseID - String (joined to JobPhases table)
EstimatedTime - time(7)
ActualTime time(7)
**JobPhases****
ID - PK String
Name - VarChar(150)
Проблема в этом примере есть 2 JobDetails для JobID 1065 -
ID | JobID | PhaseID | EstimatedTime | ActualTime
25 | 1065 | P13$ | 01:00:00.0000000 | 01:54:10.5387526
26 | 1065 | P13$ | 00:30:00.0000000 | 00:00:00.0000000
Итак, правильный результат должен быть (Обратите внимание на 1:30 в ремонте & перекроить) -
JobID | Reg. | P13$ | Repair and Reshape | P15$ | Refit Stripped Parts
1065 | BJ11 2VT | NULL | 01:30:00.0000000/01:54:10.5387526 | NULL | NULL
Любые идеи, как я могу получить полную EstimatedTime для всех строк для каждой фазы ид?
Спасибо!
Повороты не моя сильная сторона, но не изменяя 'CAST (MAX (j.EstimatedTime), как VARCHAR (MAX)) + '/' '+ 'на' CAST (SUM (j.EstimatedTime) как VARCHAR (MAX)) +' '/' '+ 'работать? –
Это не работает, потому что SUM не может использоваться с varchar. Хорошая попытка, хотя :) – dynamicuser
Оценочное время является десятичной в соответствии с вашей схемой ...? –