问:请教专家一个问题,我想写一个汇总配件出入库明细的SQL语句,以便对库存中的某个配件进行出入库的汇总。以下是需求明细:
配件编号:0001 配件名称:发动机 期初库存:100
入库一次后,有一条入库记录 配件编号 入库数量 0001 10
出库一次后,有一条出库记录 配件编号 出库库数量 0001 3
现在要汇总出这个配件的出入库明细,样子要这样
配件编号 类别 出/入库数 结余库存 0001 期初 100 100 0001 入库 10 110 0001 出库 3 107 |
答:可以先对3张表做一个union的视图,然后使用case判断,根据类别 类别算出结余库存
select id as 商品编码, name as 商品名称, class 发出类别, num as 结余数量 from mm union select mn.ID as 商品编码, mn.name as 商品名称, mn.class 发出类别, (mm.num+mn.num) as 结余数量 from mn,mm union select nn.id as 商品编码, nn.name as 商品名称, nn.class 发出类别, (mm.num+mn.num-nn.num) as 结余数量 from mn,nn,mm 当然,这是普遍采用的办法,也可以用Case来判断类别后来进行加减运算。 mm,mn,nn三个表的结构都是一样的 ID INT 编码 Name Varchar(20) 名称 Num int 发生数量 Class Varchar(10) 类别 |
表中才一条记录,在多记录时可以用where筛选一下。就是生成后不能按照上面的顺序排列