首页 新闻 会员 周边

有入库和出库表如何计算计算库存量?谢谢

0
悬赏园豆:20 [已解决问题] 解决于 2017-03-22 11:23

表:WareHouse 为物品基础资料
goodsId // 物料编号
goodsName // 物品名称
goodsType // 物品型号(规格)
unit // 计量单位

表:InRecordTB 为入库记录(goodsId为多条)
Id   // 入库ID
goodsId   // 物料编号
inNumber  // 入库数量
purchasePrice  // 购入价

表:OutRecordTB 为出库记录(goodsId为多条)
Id // 出库ID
documentNumber //  单据编号
goodsId // 物料编号
outNumber // 出库数量
costPrice // 出库成本价
sellingPrice // 销售价

如何计算WareHouse中的物品对应的库存量?
我的做法inventoryQuantity不知什么做了

            //WareHouses为物品的基础资料
            //InRecordTBs为入库记录(goodsId为多条)
            //OutRecordTBs为出库记录(goodsId为多条)
            var resule = (from a in db_OA.WareHouses
                         join b in db_OA.InRecordTBs on a.goodsId equals b.goodsId
                         join c in db_OA.OutRecordTBs on a.goodsId equals c.goodsId
                         select new
                         {
                             goodsId = a.goodsId, //编号
                             goodsName = a.goodsName, //配件名称
                             goodsType = a.goodsType, //规格及型号
                             unit = a.unit, //单位
                             inventoryQuantity= ??? //库存量=入库总数-出库总(这里什么写呢?)
                         }).ToList();

润物之音的主页 润物之音 | 初学一级 | 园豆:101
提问于:2015-09-04 18:03
< >
分享
最佳答案
0

Table A group by product, and sum of quantity

union all

table B group by product and sum of quanitity*-1

 

then group by product again and get sum of quantity

then join with product

then you will got product and inventoryQuantity

收获园豆:20
爱编程的大叔 | 高人七级 |园豆:30839 | 2015-09-04 20:06

谢谢,但我没能悟出你写的,能否细说些呢?

润物之音 | 园豆:101 (初学一级) | 2015-09-05 00:18

@润物之音: 一般情况下,我不会在LINQ里面做这个事情,不过你要也行。

1、Table A: 入库,  Table B:出库

第一步:Union All (SQL)

var q1 = (from c in db.TableA select new {ProductID=c.ProductID, Quantity=C.Quantity}).concat
(from d in db.TableB select new {ProductID=d.ProductID, Quantity=-1*d.Quantity})

第二步: Group by and Sum (SQL)
var q2= q1.groupBy(c=>c.ProductID)
             .Select(p=> new {
                ProductID=p.key,
                InventoryQuantity=sum(p.Quantity)
                })

第三步: 取得Product的其他信息
var q3 = from c in q2
              join d in db.ProductTable
              select new {
               ProductID=c.ProductID,
               InventoryQuantity=c.InventoryQuantity,
               Unit=d.Unit,
              ....
              }
爱编程的大叔 | 园豆:30839 (高人七级) | 2015-09-05 09:38

@爱编程的大叔: 你是什么做?给个方向。谢谢

润物之音 | 园豆:101 (初学一级) | 2015-09-05 12:33

@润物之音: 好多方法的,你刚刚开始,随便能做出来就行了。

1、一般能不用UNION ALL这样的语句最好了,性能较差一些,但是某些情况下又必须用,一言难尽。

2、在前台写LINQ,SQL SERVER无法进行查询缓存,性能也较差一些,可以写成视图保存起来。

3、或者使用存储过程编写,这个性能应该更好一点点。

4、.... 我的建议还是循序渐进,现在说太多,你听见得太多,并没啥好处,反而绑住手脚了。

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-09-05 12:55
其他回答(1)
0

还是设计问题。增加一个库存表,压根就不需要这么复杂的查询。

幻天芒 | 园豆:37175 (高人七级) | 2015-09-05 23:01

你好!具体什么做请详解!能否加你的qq呢?我的191971159。期待你的指点!

支持(0) 反对(0) 润物之音 | 园豆:101 (初学一级) | 2015-09-05 23:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册