if object_id('pubs..商品目录表') is not null
   drop table 商品目录表
go
create table 商品目录表(ID int,名称 varchar(10),规格 varchar(10),产地 varchar(10))
insert into 商品目录表(ID,名称,规格,产地) values(1,    'A',    '80cm' ,  '上海')
insert into 商品目录表(ID,名称,规格,产地) values(2,    'A',    '100cm',  '上海')
insert into 商品目录表(ID,名称,规格,产地) values(3,    'A',    '80cm' ,  '华北')
insert into 商品目录表(ID,名称,规格,产地) values(4,    'A',    '100cm',  '华北')
insert into 商品目录表(ID,名称,规格,产地) values(5,    'B',    '50mm' ,  '湖北')
insert into 商品目录表(ID,名称,规格,产地) values(6,    'B',    '80mm' ,  '湖北')
insert into 商品目录表(ID,名称,规格,产地) values(7,    'B',    '50mm' ,  '广东')
insert into 商品目录表(ID,名称,规格,产地) values(8,    'B',    '80mm' ,  '北京')
goif object_id('pubs..商品库存表') is not null
   drop table 商品库存表
go
create table 商品库存表(商品ID int,入库批次 varchar(10),库存数量 int)
insert into 商品库存表(商品ID,入库批次,库存数量) values(1,     '200704001',     10)
insert into 商品库存表(商品ID,入库批次,库存数量) values(1,     '200704002',     40)
insert into 商品库存表(商品ID,入库批次,库存数量) values(1,     '200704003',     50)
insert into 商品库存表(商品ID,入库批次,库存数量) values(2,     '200704004',     30)
insert into 商品库存表(商品ID,入库批次,库存数量) values(2,     '200704005',     20)
insert into 商品库存表(商品ID,入库批次,库存数量) values(3,     '200704006',     10)
insert into 商品库存表(商品ID,入库批次,库存数量) values(3,     '200704007',     40)
insert into 商品库存表(商品ID,入库批次,库存数量) values(5,     '200704008',     50)
insert into 商品库存表(商品ID,入库批次,库存数量) values(5,     '200704009',     30)
insert into 商品库存表(商品ID,入库批次,库存数量) values(6,     '200704010',     20)
goselect * from 
(
select a.名称 , a.规格 , a.产地 , isnull(b.入库批次,'') 入库批次, isnull(b.库存数量,0) 数量 
from 商品目录表 a left join 商品库存表 b on a.ID = b.商品ID
union all
select a.名称 , 规格 = '' , 产地 = '' ,入库批次 = '' , sum(b.库存数量) 数量 from 商品目录表 a,商品库存表 b where a.ID = b.商品ID group by a.名称
) t
order by 名称 , case 规格 when '' then 1 else 2 end , case 数量 when 0 then 2 else 1 enddrop table 商品目录表,商品库存表/*
名称       规格       产地       入库批次   数量          
---------- ---------- ---------- ---------- ----------- 
A                                           200
A          80cm       上海       200704001  10
A          80cm       上海       200704002  40
A          80cm       上海       200704003  50
A          100cm      上海       200704004  30
A          100cm      上海       200704005  20
A          80cm       华北       200704006  10
A          80cm       华北       200704007  40
A          100cm      华北                  0
B                                           100
B          50mm       湖北       200704008  50
B          50mm       湖北       200704009  30
B          80mm       湖北       200704010  20
B          50mm       广东                  0
B          80mm       北京                  0(所影响的行数为 15 行)
*/