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这也是要得到的结果
--------------
一般情况下都是整卷的批发,偶尔出库不到一卷的情况,就按照米数来计算.而且仅仅局限于一卷的范围内如果你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这也是要得到的结果
---------------------
其实,就是批发业务.如果是第一次入库,入库了10卷,每卷长度是200米,那么库存数就是10卷
每卷长200米.现在出库了50米,只能从其中一卷裁掉50米出库,那么剩余库存为:长度200米的9卷
长度150米的1卷
---------------------------
多谢了,循环也可以啊,怎样写呢?
建议使用DBComboBox和DBEdit,会方便很多。
这个建议好但是控制起来不方便
(
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
(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的那就不存在这个问题.
---------------------------
我要分组的原因,是考虑到有别的种类,比如"绸缎",下面有名称"丝绸"等.另外还有同一种布匹,价格不同的情况
-----------------------------------
是好麻烦啊,难度不小.
这样查询应该可以写的出来
学习中……
---------------------------------------------------------------
有个问题:
如果把入库记录改写成这样
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
----------------------------------
对,200米是一个规格,你有这样方面的经验吗,告诉我怎么做可以吗