求复杂点的SQL语句一条!
商品名称 数量 进出货 时间
袜子 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
------解决方案--------------------改下
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 商品名称,
数量=(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 商品名称
==============
冒昧的问一下,为什么要这样呢?之前的不的效率更高吗?
------解决方案--------------------借熊兄的测试环境一用。
select 商品名称,sum(数量*进出货) 数量,convert(char(10),getdate(),120) 截至日期
from test
where 时间 <=getdate()
group by 商品名称
感觉这样就行了。