2013-07-09 4 views
0

У меня есть следующий код, который возвращает повернута таблицу текущих заданий и их estiamted раз:Соединить выход сводной таблицы

DECLARE @cols AS NVARCHAR(MAX); 
DECLARE @query AS NVARCHAR(MAX); 

select @cols = STUFF((SELECT distinct ',' + 
        QUOTENAME(Name) 
        FROM JobPhases 
        FOR XML PATH(''), TYPE 
       ).value('.', 'NVARCHAR(MAX)') 
        , 1, 1, ''); 

SELECT @query = 'SELECT * 
FROM  
( 
    SELECT c.Registration as ''Reg.'', p.Name, [x] = j.EstimatedTime 
    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 
) JobDetails 
PIVOT 
( SUM(x) 
    FOR Name IN (' + @cols + ') 
) pvt' 

execute(@query); 

Выход:

JobID | Repair & Reshape | Refit Stripped Parts | Polishing 
1000 | 2.00    | 1.00     | 1.30 
1001 | 2.30    | 0.30     | 2.00 

Что мне нужно, чтобы сцепить j.ActualTime в отображаемое значение. Любые идеи, как я могу это сделать? Таким образом, конечный результат будет - 4.00/5.30 (где 4.00 - j.EstimatedTime и 5.30 - j.ActualTime).

Приветствия

ответ

1

Я хотел бы сделать все ваши обработки первых, за пределами PIVOT. Таким образом, вы можете делать скопления, конкатенации и все, что захотите. После того, как все обработки, а затем сделать простой, не-стержень, объединяющий в себе:

SELECT * 
FROM  
( 
    SELECT c.Registration as ''Reg.'', p.Name, 
     CAST(SUM(j.EstimatedTime) as VARCHAR(MAX)) + '/' + 
     CAST(SUM(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 
) JobDetails 
PIVOT 
( MAX(x) 
    FOR Name IN (' + @cols + ') 
) pvt 
+0

Это выглядит, как он может работать, но я получаю сообщение об ошибке «Тип Операнда данных VARCHAR (макс) недопустимо для оператора суммы.» Очевидно, это относится к строкам 5 и 6, неспособным преобразовать сумму в varchar, но я не могу решить решение? Приветствия – dynamicuser

+0

@MattBaughan Мой плохой. SUM не работает с типами символов, но MAX должен. Дайте мне знать, если это сработает для вас. –

Смежные вопросы