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

问个简单的SQL语句
三个表:库存表,进货表,出货表,内容如下

库存表:
仓库  商品 库存数量

出货表:
出货仓库  商品1 出货数量

进货表
进货仓库  商品 进货数量 

要求实现如下的查询

仓库   商品   库存   进货  出货
仓库1  商品1   100    100   0(就是出货表里没有这个商品的记录)
仓库1  商品2   100    0     20
仓库2  商品3   100    100   10
……
……


------解决方案--------------------
select 仓库,商品,sum(库存数量) as 库存,sum(进货数量) 进货,sum(出货数量) as 出货
from (select 仓库,商品,库存数量,0 进货数量,0 出货数量 from 库存表 union all
select 进货仓库,商品1,0 库存数量,进货数量,0 出货数量 from 进货表
union all
select 出货仓库,商品,0 库存数量,0 进货数量,出货数量 from 出货表
) as a 
group by 仓库,商品

------解决方案--------------------
引用:
晕,脑子短路了。


其实union all你自己也写的出来吧
------解决方案--------------------
其实和雪狼的方法一样


if OBJECT_ID('库存表') is not null drop table 库存表
create table 库存表(仓库  nvarchar(50),商品  nvarchar(50),库存数量 int)
insert into 库存表
select '仓库1','商品1',100 union all
select '仓库1','商品2',100 union all
select '仓库2','商品3',100 

if OBJECT_ID('出货表') is not null drop table 出货表
create table 出货表(出货仓库  nvarchar(50),商品  nvarchar(50),出货数量 int)
insert into 出货表
select '仓库1','商品2',20 union all
select '仓库2','商品3',10 

if OBJECT_ID('进货表') is not null drop table 进货表
create table 进货表(进货仓库  nvarchar(50),商品  nvarchar(50),进货数量 int)
insert into 进货表
select '仓库1','商品1',100 union all
select '仓库2','商品3',100 


;with T as(
select 仓库,商品,库存数量,0 进货数量,0 出货数量 from 库存表 
union all
select 进货仓库,商品,0 库存数量,进货数量,0 出货数量 from 进货表
union all
select 出货仓库,商品,0 库存数量,0 进货数量,出货数量 from 出货表
 )
select 仓库,商品,sum(库存数量) as 库存,sum(进货数量) 进货,sum(出货数量) as 出货
from T group by 仓库,商品

/*
仓库   商品  库存  进货  出货
----- ----- ---- ----- ------
仓库1 商品1 100 100 0
仓库1 商品2 100 0 20
仓库2 商品3 100 100 10
*/
drop table 库存表
drop table 出货表
drop table 进货表