日期:2014-05-18  浏览次数:20457 次

SQL 简单统计
leibie
类编号 类名
01 成品
02 材料
0201 棉布
0202 纤维
0203 棉花

liushui
品名 类编号 数量
A1 02 10
A2 0201 15
A3 0202 12
A4 0202 10
A5 0203 20

统计编号前两位编号为02,截取前四位不同的类别合计,结果如下

类名 数量
棉花 15
纤维 22
棉花 20  





   



------解决方案--------------------
/*
leibie
类编号 类名
01 成品
02 材料
0201 棉布
0202 纤维
0203 棉花

liushui
品名 类编号 数量
A1 02 10
A2 0201 15
A3 0202 12
A4 0202 10
A5 0203 20

统计编号前两位编号为02,
截取前四位不同的类别合计,结果如下

类名 数量
棉花 15
纤维 22
棉花 20
*/

go
if OBJECT_ID('leibie') is not null
drop table leibie
go
create table leibie(
类编号 varchar(5),
类名 nvarchar(10)
)
go
insert leibie
select '01','成品' union all
select '02','材料' union all
select '0201','棉布' union all
select '0202','纤维' union all
select '0203','棉花'

go
if OBJECT_ID('liushui') is not null
drop table liushui
go
create table liushui(
品名 varchar(4),
类编号 varchar(5),
数量 int
)
go
insert liushui 
select 'A1','02',10 union all
select 'A2','0201',15 union all
select 'A3','0202',12 union all
select 'A4','0202',10 union all
select 'A5','0203',20


select 类名,sum(数量) as 数量 from 
(select 类编号,数量 
from liushui 
where LEFT(类编号,2)='02' and LEN(类编号)>=4)a
left join (select * from leibie where LEFT(类编号,2)='02' and LEN(类编号)>=4)b
on a.类编号=b.类编号
group by 类名

/*
类名 数量
棉布 15
棉花 20
纤维 22
*/