商品名称 数量 进出货 时间袜子 100 1 2007-05-01
袜子 50 1 2007-06-01
袜子 50 -1 2007-06-03
靴子 120 1 2007-05-02
靴子 50 -1 2007-05-03上述是一个进货记录
进出货= -1 表示 商品卖出了,=1代表进货了。我想得到所有商品在某时刻的数量。
即:在某时刻前的记录里,将各商品的数量乘以进出货,然后将得到的值与相同商品记录里得到的这个值相加。
袜子数量=100*1+50*1+50*(-1)=100
靴子数量=12081+50*(-1)=70
上述例子假设截止到今天那么得到的记录集应该是商品名称 数量 截止时间袜子 100 2007-07-03
靴子 70 2007-07-03
袜子 50 1 2007-06-01
袜子 50 -1 2007-06-03
靴子 120 1 2007-05-02
靴子 50 -1 2007-05-03上述是一个进货记录
进出货= -1 表示 商品卖出了,=1代表进货了。我想得到所有商品在某时刻的数量。
即:在某时刻前的记录里,将各商品的数量乘以进出货,然后将得到的值与相同商品记录里得到的这个值相加。
袜子数量=100*1+50*1+50*(-1)=100
靴子数量=12081+50*(-1)=70
上述例子假设截止到今天那么得到的记录集应该是商品名称 数量 截止时间袜子 100 2007-07-03
靴子 70 2007-07-03
insert test select '袜子',100,1,'2007-05-01'
union all select '袜子',50,1,'2007-06-01'
union all select '袜子',50,-1,'2007-06-03'
union all select '靴子',120,1,'2007-05-02'
union all select '靴子',50,-1,'2007-05-03'select 商品名称,数量=sum(case when 进出货=1 then abs(数量*进出货) else -abs(数量*进出货) end),
截至日期=convert(char(10),getdate(),120)
from test group by 商品名称
select 商品名称,
数量=(select sum(case 进出货 when 1 then abs(数量*进出货) else -abs(数量*进出货) end)
from test where 商品名称=a.商品名称 and 时间<=getdate()),
截至日期=convert(char(10),getdate(),120)
from test a
group by 商品名称商品名称 数量 截至日期
---------- ----------- ----------
袜子 100 2007-07-03
靴子 70 2007-07-03
数量=(select sum(case 进出货 when 1 then abs(数量*进出货) else -abs(数量*进出货) end)
from test where 商品名称=a.商品名称 and 时间<=getdate()),
截至日期=convert(char(10),getdate(),120)
from test a
group by 商品名称
==============
冒昧的问一下,为什么要这样呢?之前的不的效率更高吗?
呵呵,我想多了,你说的对
原来以为时间要有限制才改的,楼主的时间字段是不会超过getdate()的
截至日期=convert(char(10),getdate(),120)
from test group by 商品名称
from test
where 时间<=getdate()
group by 商品名称感觉这样就行了。