with cte as
(
select id,1 level,name from ts_dictionary where parentid=''63"
union all
select g.id,level +1,g.name from ts_dictionary g inner join cte
on g.parentid=cte.id
)
select
isnull(A.depart,B.name) depart,
isnull(A.count,0) count
from
(
select d.name as depart ,count(d.name) as count from ts_data k
left join
ts_dictionary d on k.depart=d.id group by d.name
) A full join
(select name from cte) B
on A.depart=B.name order by B.name