Вы были на правильном пути, вам просто нужно использовать CROSS APPLY
Пример
Declare @YourTable Table ([Name] varchar(50),[Age] int,[Address] varchar(50),[AddressStartDate] date,[AddressEndDate] date)
Insert Into @YourTable Values
('Steve',19,'randomAdd','2018-01-26','2018-03-05')
,('Steve',21,'randomAdd','2018-01-26','2018-03-05')
Select A.*
,B.*
From @YourTable A
Cross Apply (
Select Month=DateName(MONTH,D)
,Days = count(*)
From (
Select Top (DateDiff(DAY,[AddressStartDate],[AddressEndDate])+1) D=DateAdd(DAY,-1+Row_Number() Over (Order By (Select Null)),[AddressStartDate])
From master..spt_values n1,master..spt_values n2
) B1
Group By Year(D),DateName(MONTH,D)
) B
Возвращает
![enter image description here](https://i.stack.imgur.com/0i8ll.png)
РЕДАКТИРОВАТЬ - Обновлено для NULL EndDate
Select A.*
,B.*
From @YourTable A
Cross Apply (
Select Month=DateName(MONTH,D)
,Days = count(*)
From (
Select Top (DateDiff(DAY,[AddressStartDate],IsNull([AddressEndDate],GetDate()))+1) D=DateAdd(DAY,-1+Row_Number() Over (Order By (Select Null)),[AddressStartDate])
From master..spt_values n1,master..spt_values n2
) B1
Group By Year(D),DateName(MONTH,D)
) B
Окончательное редактирование - Конкат год к месяцу
Select A.*
,B.*
From @YourTable A
Cross Apply (
Select Month=concat(DateName(MONTH,D),'-',year(D))
,Days = count(*)
From (
Select Top (DateDiff(DAY,[AddressStartDate],IsNull([AddressEndDate],GetDate()))+1) D=DateAdd(DAY,-1+Row_Number() Over (Order By (Select Null)),[AddressStartDate])
From master..spt_values n1,master..spt_values n2
) B1
Group By Year(D),DateName(MONTH,D)
) B