问个简单的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 进货表
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 仓库,商品