批次累加到指定数量sqlserver

这段内容展示了如何使用SQL创建数据库表`TestTable`并插入数据,然后通过窗口函数进行库存计算,特别是针对'A'系列产品的操作。查询涉及到对每个批次的用量计算,确保不超过35的总和。

 CREATE TABLE [dbo].[TestTable](
    [batch] [nchar](10) NULL,
    [num] [decimal](18, 0) NULL,
    [catalogNo] [nchar](10) NULL
) ON [PRIMARY]
GO

  --insert into TestTable ([batch],[num],[catalogNo]) values ('A1',10,'A')
  --insert into TestTable ([batch],[num],[catalogNo]) values ('A2',10,'A')
  --insert into TestTable ([batch],[num],[catalogNo]) values ('A3',10,'A')
  --insert into TestTable ([batch],[num],[catalogNo]) values ('A4',10,'A')
  --insert into TestTable ([batch],[num],[catalogNo]) values ('A5',10,'A')
  --insert into TestTable ([batch],[num],[catalogNo]) values ('A6',10,'A')
  --insert into TestTable ([batch],[num],[catalogNo]) values ('A7',10,'A')
  --insert into TestTable ([batch],[num],[catalogNo]) values ('A8',10,'A')
  --insert into TestTable ([batch],[num],[catalogNo]) values ('B1',10,'B')
  --insert into TestTable ([batch],[num],[catalogNo]) values ('B2',10,'B')
  --insert into TestTable ([batch],[num],[catalogNo]) values ('B3',10,'B')
  --insert into TestTable ([batch],[num],[catalogNo]) values ('B4',10,'B')
  --insert into TestTable ([batch],[num],[catalogNo]) values ('B5',10,'B')
  --insert into TestTable ([batch],[num],[catalogNo]) values ('B6',10,'B')
  --insert into TestTable ([batch],[num],[catalogNo]) values ('B7',10,'B')
  --insert into TestTable ([batch],[num],[catalogNo]) values ('B8',10,'B')

select 产品号=catalogNo,批次号=batch,批次库存=total_amount,每个批次的用量=iif(xx<0,total_amount,total_amount-xx) from 
  (
  select catalogNo,batch,total_amount,
    sum(total_amount) over(partition by catalogNo order by batch rows between unbounded preceding and current row) as amount,
    xx=sum(total_amount) over(partition by catalogNo order by batch rows between unbounded preceding and current row)-35
    from 
    (select catalogNo,batch,sum(num) as total_amount
    from TestTable 
    group by catalogNo,batch) as a 
    )x where catalogNo='A' and xx<=amount and xx<=total_amount

SELECT a.DocEntry, a.linenum, a.itemcode, a.quantity AS 订单数量, COALESCE(b.交货数量, 0) AS 交货数量, a.quantity - COALESCE(b.交货数量, 0) AS 未清数量 FROM RDR1 a INNER JOIN OUDP d ON a.U_Department = d.Name LEFT JOIN ( SELECT T.OR_Entry, T.OR_Line, T.物料编码, SUM(T.交货数量) AS 交货数量 FROM [ZY_TB_Sales_Details] T WHERE T.业务体系 = '经销体系' GROUP BY T.OR_Entry, T.OR_Line, T.物料编码 ) b ON a.DocEntry = b.OR_Entry AND a.linenum = b.OR_Line WHERE a.linestatus = 'o' AND a.quantity - COALESCE(b.交货数量, 0) > 0 AND d.Remarks = '经销体系' 这个代码是每个单据每行中的物料对应的订单数量、交货数量、未清数量。 SELECT 物料编号, 批次编号, 公司, 效期, 库存数量 FROM [ZY_TB_BI_Stock] WHERE 备货占用类型 = '备货未占' AND 业务体系 = '经销体系'; 这个代码是库存表中每个物料对应的批次编号、公司、效期、库存数量等数据。 现在我需要编写一段sqlserver,计算每个单据对应行号的物料的订单数量、交货数量、未清数量、以及这个物料当前在库存的数量、当前可用的数量、该行可以分配的数量、缺少的数量。因为会有 很多的订单需要相同的物料,当前可用的数量肯定是随着库存的分配逐渐减少的。如果当前库存不能满足未清数量,那就有多少库存就给多少库存。另外分配库存的时候要按照效期从旧的到新分配,最终 结果也要展示出分配的库存是那个批次编号的、效期是多少、那个公司的,没有分配到库存的订单也要展示出来。最主要的是尽量不要用循环
最新发布
07-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值