• Good. Glad you got it sorted.

    I meant to suggest using a CTE like this to get the base data using your original query:

    ;WITH CTE_Base_Data AS

    (

    Select S.number,

    SStatus.name stat,

    Sshis.StartDate

    From supportcall S

    JOIN dbo.Party AS Pa

    ON Pa.PartyID = S.PartyID

    JOIN Organization AS O

    ON O.OrganizationID = PA.OrganizationID

    JOIN SupportCallStatusHistory AS SSHis

    ON Sshis.SupportCallID = S.SupportCallID

    JOIN SupportCallStatus AS SStatus

    ON sshis.StatusID = sstatus.SupportCallStatusID

    Where O.name = 'Organisation'

    AND S.opendate > '1-1-2015'

    AND (sstatus.name = 'assigned' or sstatus.name = 'new')

    order by S.number, Sshis.StartDate

    )

    SELECT T1.Number, T1.StartDate as [New], T2.StartDate as [Assigned],

    CAST ((datediff (ss, T1.StartDate, T2.StartDate)/3600/24) AS varchar (2)) + ' days ' + CAST((datediff(ss, T1.StartDate, T2.StartDate)/3600%24) AS varchar(4)) + ' hours, ' + CAST((datediff(ss, T1.StartDate, T2.StartDate)%3600)/60 AS Varchar(2)) + ' minutes, ' + CAST((datediff(ss, T1.StartDate, T2.StartDate)%60) AS VARCHAR(2)) + ' seconds' as [Subtracted]

    FROM CTE_Base_Data T1

    CROSS APPLY (SELECT * FROM CTE_Base_Data WHERE Stat = 'Assigned' AND Number = T1.Number) T2

    WHERE T1.Stat = 'New';

    You can avoid using a table variable with a CTE.