首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

这个能够用一句sql语句实现吗?具体如何写呢

2013-01-18 
这个能够用一句sql语句实现吗?具体怎么写呢?数据库有4个表目录:编码名称002用户盒003膨胀螺丝004连接线006

这个能够用一句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 目录,施工班组,出库单,出库明细

热点排行