这个能够用一句sql语句实现吗?具体怎么写呢?
数据库有4个表
目录:
编码 名称
002 用户盒
003 膨胀螺丝
004 连接线
006 -7线
007 放大器
施工班组:
名称
施工一组
施工二组
施工三组
出库单:
出库编号 库房 施工班组 出库日期
00000001 仓库1 施工二组 2012-12-18
00000002 仓库1 施工二组 2012-12-18
00000003 仓库1 施工二组 2012-12-18
00000004 仓库1 施工三组 2012-12-18
00000005 仓库1 施工二组 2012-12-20
00000006 仓库1 施工二组 2012-12-20
00000007 仓库1 施工二组 2012-12-20
出库明细:
出库编号 编码 名称 数量 库房
00000001 002 用户盒 2 仓库1
00000001 004 连接线 3 仓库1
00000001 004 连接线 3 仓库1
00000002 004 连接线 1 仓库1
00000002 002 用户盒 2 仓库1
00000003 002 用户盒 1 仓库1
00000005 004 连接线 1 仓库1
00000006 004 连接线 1 仓库1
00000007 002 用户盒 1 仓库1
00000004 002 用户盒 9 仓库1
00000004 004 连接线 8 仓库1
现在需要查询出“目录”中各个器材在 “仓库1”中,各个施工班组的出库量
(施工班组中的记录是动态变化的,就是可能会增加“施工四组”)
用一句sql语言达到以下显示效果:
编码 名称 施工一组 施工二组 施工三组 合计
002 用户盒 100 100 200 400
003 膨胀螺丝 100 100 200 400
004 连接线 100 100 200 400
006 -7线 0 0 53 53
007 放大器 0 0 0 0
[解决办法]
create table 目录(编码 varchar(10),名称 nvarchar(10))
insert into 目录 select '002','用户盒'
insert into 目录 select '003','膨胀螺丝'
insert into 目录 select '004','连接线'
insert into 目录 select '006','-7线'
insert into 目录 select '007','放大器'
create table 施工班组(名称 nvarchar(10))
insert into 施工班组 select '施工一组'
insert into 施工班组 select '施工二组'
insert into 施工班组 select '施工三组'
create table 出库单(出库编号 varchar(20),库房 nvarchar(10),施工班组 nvarchar(10),出库日期 datetime)
insert into 出库单 select '00000001','仓库1','施工二组','2012-12-18'
insert into 出库单 select '00000002','仓库1','施工二组','2012-12-18'
insert into 出库单 select '00000003','仓库1','施工二组','2012-12-18'
insert into 出库单 select '00000004','仓库1','施工三组','2012-12-18'
insert into 出库单 select '00000005','仓库1','施工二组','2012-12-20'
insert into 出库单 select '00000006','仓库1','施工二组','2012-12-20'
insert into 出库单 select '00000007','仓库1','施工二组','2012-12-20'
create table 出库明细(出库编号 varchar(20),编码 varchar(10),名称 nvarchar(10),数量 int,库房 nvarchar(10))
insert into 出库明细 select '00000001','002','用户盒',2,'仓库1'
insert into 出库明细 select '00000001','004','连接线',3,'仓库1'
insert into 出库明细 select '00000001','004','连接线',3,'仓库1'
insert into 出库明细 select '00000002','004','连接线',1,'仓库1'
insert into 出库明细 select '00000002','002','用户盒',2,'仓库1'
insert into 出库明细 select '00000003','002','用户盒',1,'仓库1'
insert into 出库明细 select '00000005','004','连接线',1,'仓库1'
insert into 出库明细 select '00000006','004','连接线',1,'仓库1'
insert into 出库明细 select '00000007','002','用户盒',1,'仓库1'
insert into 出库明细 select '00000004','002','用户盒',9,'仓库1'
insert into 出库明细 select '00000004','004','连接线',8,'仓库1'
go
select a.编码,a.名称,
sum(case when b.施工班组='施工一组' then a.数量 else 0 end) as 施工一组,
sum(case when b.施工班组='施工二组' then a.数量 else 0 end) as 施工二组,
sum(case when b.施工班组='施工三组' then a.数量 else 0 end) as 施工三组,
sum(case when b.施工班组='施工四组' then a.数量 else 0 end) as 施工四组
from 出库明细 a inner join 出库单 b on a.出库编号=b.出库编号
where a.库房='仓库1'
group by a.编码,a.名称
/*
编码 名称 施工一组 施工二组 施工三组 施工四组
---------- ---------- ----------- ----------- ----------- -----------
002 用户盒 0 6 9 0
004 连接线 0 9 8 0
(2 行受影响)
*/
go
drop table 目录,施工班组,出库单,出库明细