Try this query:
select string_agg(a, ';') within group (order by R)
from
(
select R, string_agg(D, ',') within group (order by D) a
from #T
group by R
) t
If string_agg is not available, then:
select stuff((select ';' + a from
(
select R, stuff((select ',' + D from #T where R = t.R order by D for xml path('')), 1, 1, '') a
from #T t
group by R
) t
order by R
for xml path('')), 1, 1, '')