求SQL语句
有两张表。一张产品表[字段有:id,产品名,库存数],一张产品进出流水表[字段有:id,产品ID,进/出,操作数量,操作日期]。现求每一种产品的上月结存、本月共进、本月共...
有两张表。一张产品表[字段有:id,产品名,库存数],一张产品进出流水表[字段有:id,产品ID,进/出,操作数量,操作日期]。
现求 每一种产品的上月结存、本月共进、本月共出、本月结存。求SQL语句。 展开
现求 每一种产品的上月结存、本月共进、本月共出、本月结存。求SQL语句。 展开
展开全部
你用的什么数据库,因为数据库不同可能函数有所不同。
上月结余,本月结余的公式是啥,他们和产品表的库存是什么关系。也就是业务逻辑。
库存数是随时变化的么?还是必须有的固定库存?还是每月变化一次?
日期是什么数据类型?是什么格式的,带不带时分秒?
你如果把这些说清楚了,估计就有人回答了,你直接这么说大家时间不知道怎么写。
更多追问追答
追问
MSSQL
没有公式。产品进出流水表的产品ID对应产品表的ID,也就是说有主外键关系。产品流水表中有进/出这个字段,进的话就在产品表中加上操作数量,出的话就减去。
库存肯定会变化呀,和流水表中的操作数量同时变化。
日期是Datetime,带不带时分秒没关系吧。
追答
这里假设你要求2014年2月的结余为上月结余。
这里我理解的上月结余,应该是上个月最终剩下的,而不是上个月的进-出,也不知道这么理解对不对。
我这里假设你是在3月查询的
select 产品ID,进/出,sum(操作数量) from where DATEDIFF(MONTH,操作日期,GETDATE())=0 group by 产品ID,进/出
还有一种查法就是convert(varchar(7),操作日期,120)='2014-03'
直接用year和month也可以,或者datepart
我假设进/出中0为进,1为出。
select b.id,b.,b.产品名 b.库存数-a.本月共进+a本月共出 上月结余,a.本月共进,a本月共出, b.库存数 本月结余 from (select 产品ID,sum(case when 进/出=0 then 操作数量 end) 本月共进,sum(case when 进/出=1 then 操作数量 end) 本月共出 from 进出流水表 where DATEDIFF(MONTH,操作日期,GETDATE())=0 group by 产品ID) a, 产品表 b where d.id=a.产品ID
子查询的地方可能有些地方要有点改动,你先看看子查询的结果是什么,如果是
1 1000 2000
那么就没问题
如果是
1 1000
1 2000
那么就还要记性改动。可能要加一个else 0什么的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询