qw12cn() ( ) 
--------------
一般情况下都是整卷的批发,偶尔出库不到一卷的情况,就按照米数来计算.而且仅仅局限于一卷的范围内如果你3日再出库50米,你怎么确定是减150M的,还是200M的。
和实际库存很可能出现差别。
这种情况列出2日库存结余,让用户进行选择,就是这样类别  名称   剩余长度     宽度    单位   价格   剩余数量    日期 
布匹  涤纶     200         2      卷     20       10     2006-10-1
布匹  涤纶     150         2      卷     20        1     2006-10-2        
布匹  涤纶     200         2      卷     20        9     2006-10-2这也是要得到的结果

解决方案 »

  1.   

    liangfei1983(lliangfei)
    ---------------------
    其实,就是批发业务.如果是第一次入库,入库了10卷,每卷长度是200米,那么库存数就是10卷
    每卷长200米.现在出库了50米,只能从其中一卷裁掉50米出库,那么剩余库存为:长度200米的9卷
    长度150米的1卷
      

  2.   

    liangfei1983(lliangfei) ( )
    ---------------------------
    多谢了,循环也可以啊,怎样写呢?
      

  3.   

    liangqingzhi(老之)
     
     
       建议使用DBComboBox和DBEdit,会方便很多。
    这个建议好但是控制起来不方便
      

  4.   

    fcuandy(长翅膀的不一定是天使,也可能是鸟人)谢谢了.
      

  5.   

    create table t
    (
    id int identity(1,1),
    类别 varchar(20),
    名称 varchar(20),
    长度 int,
    宽度 int,
    单位 varchar(10),
    价格 decimal(9,2),
    数量 int,
    日期 datetime,
    状态 char(1)--1=入库,0=出库
    )insert into t select'布匹','涤纶',200,2,'卷',20,10,'2006-10-1','1'
    union all select'布匹','涤纶',50,2,'卷',20,1,'2006-10-2','0'
    union all select'布匹','涤纶',120,3,'卷',20,2,'2006-10-2','0'
    union all select'布匹','涤纶',250,3,'卷',20,2,'2006-10-3','1'declare @len int
    set @len=200
    select id,类别,名称,长度,宽度,单位,价格,数量,数量*长度 currentlen,状态,日期,
    (select sum((case when 状态=0 then -1 else 1 end)*数量*长度) from t where t.id<=a.id) as allen  into # from t a
    select id,类别,名称,长度,宽度,单位,价格,allen/@len 数量,状态,日期 from # where 状态=1
    union all
    select id,类别,名称,@len,宽度,单位,价格,allen/@len,状态,日期  from # where 状态=0
    union all
    select id,类别,名称,allen%@len,宽度,单位,价格,case when 状态=1 then allen/@len else 1 end,状态,日期  from # where allen%@len<>0 and 状态=0
    union 
    select id,类别,名称,长度,宽度,单位,价格,数量,状态,日期  from # where 状态=1
    order by 日期,id,数量drop table t,#/*
    1 布匹 涤纶 200 2 卷 20.00 10 1 2006-10-01 00:00:00.000
    2 布匹 涤纶 150 2 卷 20.00 1 0 2006-10-02 00:00:00.000
    2 布匹 涤纶 200 2 卷 20.00 9 0 2006-10-02 00:00:00.000
    3 布匹 涤纶 110 3 卷 20.00 1 0 2006-10-02 00:00:00.000
    3 布匹 涤纶 200 3 卷 20.00 8 0 2006-10-02 00:00:00.000
    4 布匹 涤纶 250 3 卷 20.00 2 1 2006-10-03 00:00:00.000
    4 布匹 涤纶 250 3 卷 20.00 11 1 2006-10-03 00:00:00.000
    */为了写查询语句方便我用了临时表.
    语句逻辑没有细想,可能会有bug
      

  6.   

    fcuandy(长翅膀的不一定是天使,也可能是鸟人)再次感谢,我试一下
      

  7.   

    fcuandy(长翅膀的不一定是天使,也可能是鸟人)有个小问题,如果按照日期进行查询的话,应该把条件写在什么位置上?
      

  8.   

    select id,类别,名称,长度,宽度,单位,价格,数量,数量*长度 currentlen,状态,日期,
    (select sum((case when 状态=0 then -1 else 1 end)*数量*长度) from t where t.id<=a.id and 日期...) as allen  into # from t a where 日期...在这两个地方加就可以了.忽略了一点,进货如果布长度超过200,这个又怎么算?比如 240... 如果实际上进的都是200的那就不存在这个问题.
      

  9.   

    我觉得的按照"类别","名称","长度","宽度","价格"来分组,这样才能做到通用化.能否把sql改写成这样?
      

  10.   

    fcuandy(长翅膀的不一定是天使,也可能是鸟人)这样的明细帐也能出来,真是好厉害
    ---------------------------
    我要分组的原因,是考虑到有别的种类,比如"绸缎",下面有名称"丝绸"等.另外还有同一种布匹,价格不同的情况
      

  11.   

    按照你的要求,这条SQL语句,我认为将为是非常麻烦的!!!!因为要考虑的东西太多哒!!!
      

  12.   

    liangfei1983(lliangfei)
    -----------------------------------
    是好麻烦啊,难度不小.
      

  13.   

    表结构中再加上一列: InID int, 记录是哪笔入库的记录,状态char(1)=0时用;
    这样查询应该可以写的出来
    学习中……
      

  14.   

    fcuandy(长翅膀的不一定是天使,也可能是鸟人) 
    ---------------------------------------------------------------
    有个问题:
    如果把入库记录改写成这样
    insert into t select'布匹','涤纶',200,2,'卷',20,10,'2006-10-1','1'
    union all select'布匹','涤纶',200,2,'卷',20,10,'2006-10-1','1'
    那么结果为:
    布匹 涤纶 200 2 卷 20.00 10 1 2006-10-01 
    布匹 涤纶 200 2 卷 20.00 10 1 2006-10-01 布匹 涤纶 200 2 卷 20.00 20 1 2006-10-01 -----------------------------------------
    而要得到的结果为:
    布匹 涤纶 200 2 卷 20.00 20 1 2006-10-01 以上情况就是,只有入库操作,没有出库操作的情况下,库存结余数是20
      

  15.   

    netcup(茶杯) 
    ----------------------------------
    对,200米是一个规格,你有这样方面的经验吗,告诉我怎么做可以吗