Это моё решение. Самое сложное, чтобы заставить его работать, было понимание того, что мне пришлось использовать синтаксис WITH x as
, потому что я никогда не слышал об этом раньше.
WITH x as (
SELECT Days.Date, Disps.HisResult, SUM(CASE WHEN Historic.HisResult IS NULL THEN 0 ELSE 1 END) AS SumResult
FROM (
SELECT DISTINCT DATEADD(day, DATEDIFF(day, 0, DATEADD(hh, -5, HisCallDate)), 0) as Date FROM Historic
) AS Days
LEFT JOIN (SELECT DISTINCT roxcoDispCode as HisResult FROM RoxcoSystem.dbo.DispCodes) AS Disps ON 1=1
LEFT JOIN Historic ON Disps.HisResult = Historic.HisResult AND Days.Date = DATEADD(day, DATEDIFF(day, 0, DATEADD(hh, -5, HisCallDate)), 0)
GROUP BY Days.Date, Disps.HisResult
)
SELECT * FROM x
PIVOT
(
MAX(SumResult)
FOR HisResult IN ([00], [01], [02], [03])
)
AS p