问个简单的SQL语句
三个表:库存表,进货表,出货表,内容如下
库存表:
仓库 商品 库存数量
出货表:
出货仓库 商品1 出货数量
进货表
进货仓库 商品 进货数量
要求实现如下的查询
仓库 商品 库存 进货 出货
仓库1 商品1 100 100 0(就是出货表里没有这个商品的记录)
仓库1 商品2 100 0 20
仓库2 商品3 100 100 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 '仓库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商品11001000
仓库1商品2100020
仓库2商品310010010
*/
drop table 库存表
drop table 出货表
drop table 进货表