入库表fmaterial
if object_id('fmaterial','u') is not null drop table fmaterial
go
CREATE TABLE fmaterial(
id int IDENTITY (1, 1) NOT NULL ,
类别 varchar(10) ,
品名 varchar(10) ,
单位 varchar(10) ,
数量 int ,
)
GO
insert into fmaterial
select '办公','打印机','台','2'
union all select '办公','打印机','台','1'
union all select '办公','打印纸','盒','2'
union all select '其它','电话','台','2'
select * from fmaterial
/
id 类别 品名 单位 数量
----------- ---------- ---------- ---------- -----------
1 办公 打印机 台 2
2 办公 打印机 台 1
3 办公 打印纸 盒 2
4 其它 电话 台 2
出库表foutmaterial
if object_id('foutmaterial','u') is not null drop table foutmaterial
go
CREATE TABLE foutmaterial(
id int IDENTITY (1, 1) NOT NULL ,
类别 varchar(10) ,
品名 varchar(10) ,
单位 varchar(10) ,
数量 int ,
)
GO
insert into foutmaterial
select '办公','打印机','台','1'
union all select '办公','打印机','台','1'
union all select '办公','打印纸','盒','1'
select * from foutmaterial
/
id 类别 品名 单位 数量
----------- ---------- ---------- ---------- -----------
1 办公 打印机 台 1
2 办公 打印机 台 1
3 办公 打印纸 盒 1
///要求求出
类别 品名 单位 入库数量 出库数量 库存数量
------ ---------- -------- -------- --------- -----------
办公 打印机 台 3 2 1
办公 打印纸 盒 2 1 1
其它 电话 台 2 0 2
select t.*,t.入库数量-t.出库数量 as 库存数量 from
(
SELECT 类别,品名,单位, SUM(数量) AS 入库数量
,isnull(( SELECT SUM(数量) FROM FOUTMATERIAL AS T2 WHERE t1.类别+t1.品名+t1.单位=t2.类别+t2.品名+t2.单位 GROUP BY 类别,品名,单位 ),0) as 出库数量
FROM FMATERIAL AS T1 GROUP BY 类别, 品名 ,单位
) t