--生成测试数据
create table A([分类编号] varchar(20),[商品编号] varchar(20),[分类(商品)名称] varchar(20))
insert into A select rtrim('1    '),rtrim('     '),'汽车'
insert into A select rtrim('1.1  '),rtrim('     '),'  轿车'
insert into A select rtrim('1.1.1'),rtrim('BZ001'),'    奔驰'
insert into A select rtrim('1.1.2'),rtrim('FLL00'),'    法拉利'
insert into A select rtrim('1.2  '),rtrim('     '),'  货车'
insert into A select rtrim('1.2.1'),rtrim('DF000'),'    东风'
insert into A select rtrim('1.2.2'),rtrim('FT000'),'    福田'
insert into A select rtrim('2    '),rtrim('     '),'轮船'
create table B(年月 varchar(10),商品编号 varchar(20),数量 int)
insert into B select '200510','BZ001',10
insert into B select '200510','DF000',9
insert into B select '200510','FT000',5
insert into B select '200510','FLL00',2
--执行查询select
    T.年月,
    A1.[分类编号],
    A1.[商品编号],
    A1.[分类(商品)名称],
    数量 = isnull(sum(B.数量),0)
from
    (select distinct 年月 from B) T
cross join
    A A1
inner join
    A A2
on
    A2.[分类编号] like A1.[分类编号]+'%'
left join
    B
on
    A2.[商品编号] = B.[商品编号] and T.年月 = B.年月
group by
    T.年月,A1.[分类编号],A1.[商品编号],A1.[分类(商品)名称]
order by
    T.年月,A1.[分类编号]--输出结果
/*
年月    分类编号  商品编号  分类(商品)名称  数量
------  --------  --------  --------------  -----
200510  1                   汽车            26
200510  1.1                   轿车          12
200510  1.1.1     BZ001         奔驰        10
200510  1.1.2     FLL00         法拉利       2
200510  1.2                   货车          14
200510  1.2.1     DF000         东风         9
200510  1.2.2     FT000         福田         5
200510  2                   轮船             0
*/
--删除测试数据
drop table A,B