--生成测试数据
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
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
谢谢!但效率好象比较低,
A表1W多条记录,B表1W多记录的时候,SQLServer2K中需要几十秒,转换到access中竟然需要3分多钟
-_-#