SET DATEFORMAT dmy
SELECT
ID,
Period,
(SELECT ISNULL(SUM(DATEDIFF(DAY,datefrom,dateto) + 1),0)
FROM Test
WHERE DATEDIFF(DAY,datefrom,dateto) > 0 and code = 'A'
and x.Period = Period and x.id = id)
as ACode,
(SELECT ISNULL(SUM(DATEDIFF(DAY,datefrom,dateto) + 1),0)
FROM Test
WHERE DATEDIFF(DAY,datefrom,dateto) > 0 and code = 'B'
and x.Period = Period and x.id = id)
as Bcode
FROM TABLENAME x
GROUP BY
Period,
ID
Плюс, добавленный к разнице дат, предназначен для учета неполных дней.