• I am not sure what the "new code" added means. This returns exactly same set as Sean but using PIVOT. Just a different approach. I compared the two in Actual Query Execution plan and Sean's had a lower query cost.

    SELECT

    pvt.Location,

    'EXEMPT' as 'Batch ID',

    pvt.EmpId as 'File #',

    pvt.EmpLastName as 'Last Name',

    pvt.EmpFirstName as 'First Name',

    'y' as 'Cancel Pay',

    NULL as 'Pay #',

    NULL as 'Reg Earnings',

    2 AS 'Rate Code',

    NULL as 'Tax Frequency',

    NULL as 'Reg Hours',

    'Hours 4 Code' = CASE WHEN S IS NOT NULL

    THEN 'S'

    ELSE NULL

    END,

    'Sick Hours' = S,

    'Hours 4 Code' = CASE WHEN V IS NOT NULL

    THEN 'V'

    ELSE NULL

    END,

    'Vacation Hours' = V,

    'Hours 4 Code' = CASE WHEN O IS NOT NULL

    THEN 'O'

    ELSE NULL

    END,

    'Unknown Hours' = O

    FROM (

    SELECT

    e.EmpID

    ,e.Location

    ,e.EmpFirstName

    ,e.EmpLastName

    ,Type = CASE WHEN Type = 'Sick'

    THEN 'S'

    WHEN Type = 'Vacation'

    THEN 'V'

    ELSE 'O'

    END

    ,Total_hours = SUM(total_hours)

    FROM #tblEmployee e

    JOIN #tblTimeOffRequest r

    ON e.EmpId = r.EmpId

    GROUP BY

    e.EmpID

    ,e.Location

    ,e.EmpFirstName

    ,e.EmpLastName

    ,CASE WHEN Type = 'Sick'

    THEN 'S'

    WHEN Type = 'Vacation'

    THEN 'V'

    ELSE 'O'

    END

    ) PersonalTime

    PIVOT

    ( MAX(total_hours) FOR Type IN (, [V],[O])) as pvt