先进先出的数据冲销处理

原创 2005年06月02日 21:59:00

先进先出的数据冲销处理

--示例数据:
create table 销售订单(单号 varchar(10),日期 datetime,货品编码 varchar(10),数量 int)
insert 销售订单 
select 'A1','2005-5-1','ABCD',100 union all
select 'A2','2005-5-3','ABCD',200 union all
select 'A3','2005-5-4','ABCD',300 union all
select 'A4','2005-5-8','ABCD',500

create table 销售发货单(单号 varchar(10),日期 datetime,货品编码 varchar(10),数量 int)
insert 销售发货单
select 'B1','2005-5-05','ABCD',250 union all
select 'B2','2005-5-07','ABCD',100 union all
select 'B3','2005-5-10','ABCD',150'
GO

问题描述:
    对于示例数据中的销售订单和销售发货单,由于客户在做销售发货时无法指定本次是要发那一张订单的东西。所以销售订单无法与销售发货单关联。客户要求以先进先出的方式统计销售订单的执行情况。对于示例数据,要求结果如下:
单号        日期             货品编码    订单数量    发货数量     待执行数量       
---------- ----------------- ------------- -------------- --------------- ------------------ 
A1         2005-05-01   ABCD       100            100              0
A2         2005-05-03   ABCD       200            200             0
A3         2005-05-04   ABCD       300            200            100
A4         2005-05-08   ABCD       500            0                 500
                                      合计          1100         500             600

--查询处理的过程
select 
    a.单号,a.日期,a.货品编码,
    订单数量=a.数量,
    发货数量=isnull(case when a.s数量<b.数量 then a.数量 else b.数量-a.p数量 end,0),
    待执行数量=case when a.s数量<b.数量 then 0 else a.s数量-isnull(b.数量,a.p数量) end
into # from(
    select 单号,日期=convert(char(10),日期,120),货品编码,
        数量=sum(数量),
        p数量=isnull((select sum(数量) from 销售订单
    where 货品编码=a.货品编码
        and(datediff(day,日期,min(a.日期))>0
        or datediff(day,日期,min(a.日期))=0 and 单号<a.单号)),0),
        s数量=isnull((select sum(数量) from 销售订单
            where 货品编码=a.货品编码
                and(datediff(day,日期,min(a.日期))>0
                or datediff(day,日期,min(a.日期))=0 and 单号<=a.单号)),0)
    from 销售订单 a
    group by 单号,convert(char(10),日期,120),货品编码
)a 
    left join(
        select 货品编码,数量=sum(数量)
        from 销售发货单
        group by 货品编码
    )b on a.货品编码=b.货品编码
        and a.p数量<b.数量
order by a.单号,a.日期,a.货品编码

select * from #
union all
select '','','合计',sum(订单数量),sum(发货数量),sum(待执行数量) from #
drop table #

原帖地址

按需求先进先出分配库存

--测试数据 create table #库存( wareid varchar(13), makeno varchar(40), storeqty numeric(16,6)) inse...
  • u010192842
  • u010192842
  • 2014-08-04 16:38:05
  • 1129

sql先进先出查询解决办法

求 sql先进先出查询解决办法???? 商品编号  批次号  库存数量 0001      090801     200 0001      090501      50...
  • sunfor
  • sunfor
  • 2011-09-15 15:13:44
  • 3094

先进先出的订单分配处理

原帖地址:http://community.csdn.net/Expert/topic/3239/3239774.xml?temp=9.711856E-02物料 批号 库存数aa p01 5aa p0...
  • zjcxc
  • zjcxc
  • 2004-08-17 21:54:00
  • 3454

计算先进先出简例

----------------------------------------------------------------------------  Author : htl258(Tony)-...
  • htl258
  • htl258
  • 2010-01-06 09:23:00
  • 1349

使用存储过程实现进销存系统中的先进先出算法(3)——Oracle9i版

本文是我在前一篇文章提到的关于先进先出存储过程,针对Oracle 9i 的修改版,基本思路一致,只是修改了关键字使用方法。         有关数据库和存储过程的设计,请参阅使用存储过程实现进销存系...
  • nileader
  • nileader
  • 2014-12-25 17:16:09
  • 795

算法——先进先出队列

public class Stack implements Iterable{ private Node first; private int N; private clas...
  • z5234032
  • z5234032
  • 2015-03-27 15:28:48
  • 475

使用存储过程实现进销存系统中的先进先出算法(1)——数据库与存储过程设计

进销存系统中的先进先出,指得是利用队列原理——先采购进来的商品先卖出。          这里我用SQL Server的存储过程来实现这个功能。          关于这个存储过程的调用和演示说明...
  • nileader
  • nileader
  • 2014-12-25 17:16:03
  • 1008

采用先进先出的退货问题

采用先进先出的退货问题(转)  采用先进先出由于同时有几处进货,仓库管理不完善,出现如下问题:在A供应商,B供应商处先后进货,在电脑里A供应商的货已卖完,还有B供应商的货。而实际中A供应商有少量货需要...
  • Tercel99
  • Tercel99
  • 2011-05-08 17:36:00
  • 5413

先进先出的数据冲销处理

先进先出的数据冲销处理 --示例数据:create table 销售订单(单号 varchar(10),日期 datetime,货品编码 varchar(10),数量 int)insert 销售订单 ...
  • chenzhiya
  • chenzhiya
  • 2008-01-03 14:47:00
  • 163
收藏助手
不良信息举报
您举报文章:先进先出的数据冲销处理
举报原因:
原因补充:

(最多只允许输入30个字)