日期:2014-05-18  浏览次数:20641 次

求复杂点的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 商品名称

感觉这样就行了。