日期:2014-05-17  浏览次数:20463 次

请问这种情况 下应该怎么样分类统计?
本帖最后由 wzqx 于 2013-12-09 17:37:24 编辑
表的结构如图

就是有三种材料,三种数量, 材料的来源分客户提供 和本厂提供 两种

现要求统计出 客户提供 的每种材料的汇总
即:
张三 材料A 300
张三 材料C 100
李四 材料B 100
李四 材料A 200

------解决方案--------------------
建表语句:
--drop table tb

create table tb(
客户名称 varchar(20),
交易日期 datetime,
一号材料名称 varchar(20),
一号材料数量 int,
一号材料来源 varchar(20), 
二号材料名称 varchar(20),
二号材料数量 int,
二号材料来源 varchar(20), 
三号材料名称 varchar(20),
三号材料数量 int,
三号材料来源 varchar(20))


insert into tb
select '张三','2013-1-1','材料A',100,'客户提供','材料B',100,'本厂提供','材料C',100,'客户提供' union all
select '李四','2013-1-1','材料B',100,'客户提供','材料A',100,'客户提供','材料A',100,'客户提供' union all
select '张三','2013-1-1','材料A',100,'客户提供','材料A',100,'本厂提供','材料A',100,'客户提供'


查询语句:
select 客户名称,材料名称,SUM(材料数量) as 材料数量
from 
(
select 客户名称,一号材料名称 as 材料名称,一号材料数量 as 材料数量,一号材料来源 as 材料来源  from tb 
union all
select 客户名称,二号材料名称 as 材料名称,二号材料数量 as 材料数量,二号材料来源 as 材料来源 from tb 
union all
select 客户名称,三号材料名称 as 材料名称,三号材料数量 as 材料数量,三号材料来源 as 材料来源 from tb 
)t
where 材料来源 = '客户提供'
group by 客户名称,材料名称
order by 客户名称 desc
/*
客户名称 材料名称 材料数量
张三     材料A 300
张三     材料C 100
李四     材料A 200
李四     材料B 100
*/