库龄计算,SQL怎么写

ldf0 2004-07-21 05:43:57
现有一表记录产品进出库
product_id(产品代码) inoutdate(出入库日期) qty(数量)
001 2004-01-01 10
001 2004-01-03 -8
001 2004-01-04 -1
001 2004-01-05 5
001 2004-01-07 -6
其中数量为正表示入库,数量为负表示出库,现要计算任意日期时库存产品的库存天数。系统默认先进先出。
比如查询2004-01-02日库龄,则为10个、库龄为1天
查询2004-01-03日库龄,则为2个、库龄为2天
查询2004-01-04日库龄,则为1个、库龄为3天
查询2004-01-05日库龄,则为1个、库龄为4天和5个、库龄为0天
查询2004-01-06日库龄,则为1个、库龄为5天和5个、库龄为1天
查询2004-01-07日库龄,则为0个、库龄为0
...全文
1728 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghosthjt 2004-07-28
  • 打赏
  • 举报
回复
我这个方法绝对正确的:

declare @dt datetime,@pid char(3)
set @dt='2004-01-08'
set @pid='001'

declare @p table ( pid char(3),iodt datetime, qty int)
insert @p select '001', '2004-01-01', 10
union select '001', '2004-01-03', -8
union select '001', '2004-01-04', -1
union select '001', '2004-01-05', 5
union select '001', '2004-01-07', -3

select t1.pid,datediff(day,t1.iodt,@dt) as 库龄,qty as 库存 from @p t1
cross join (
select top 1 pid,iodt,inqty+outqty 库存
from (
select t1.pid,t1.iodt,
(select sum(qty) from @p where iodt<=t1.iodt and qty>0) as inqty
from @p t1
where iodt<=@dt and qty>0
) t1
cross join (select sum(qty) as outqty from @p where iodt<=@dt and qty<0 group by pid) t2
where inqty+outqty>0
order by iodt
) t2
where qty>0 and t1.iodt>t2.iodt
union (

select top 1 pid,datediff(day,iodt,@dt),inqty+outqty 库存
from (
select t1.pid,t1.iodt,
(select sum(qty) from @p where iodt<=t1.iodt and qty>0) as inqty
from @p t1
where iodt<=@dt and qty>0
) t1
cross join (select sum(qty) as outqty from @p where iodt<=@dt and qty<0 group by pid) t2
where inqty+outqty>0
)
ldf0 2004-07-28
  • 打赏
  • 举报
回复
问题解决了,谢谢 victorycyz(中海) 兄!!!
JackSonzhang 2004-07-26
  • 打赏
  • 举报
回复
up
zilang 2004-07-26
  • 打赏
  • 举报
回复
哦,知道了:)
zilang 2004-07-26
  • 打赏
  • 举报
回复
为什么同一笔货物001,在2004-01-06查询时有两笔结果啊,
学习中
victorycyz 2004-07-26
  • 打赏
  • 举报
回复
select pid,库龄,case when qty>数量 then 数量 else qty end as 数量
from ( select pid,
datediff(day,iodt,@dt) as 库龄,
qty,
( select isnull(sum(qty),0)
from @p
where pid=@pid and iodt<=@dt and (iodt<=a.iodt or (iodt>a.iodt and qty<0))
)
as 数量
from @p a
where pid=@pid and iodt<=@dt and qty>0
) b
where 数量>0
ldf0 2004-07-26
  • 打赏
  • 举报
回复
多谢victorycyz(中海)兄,您的SQL基本可以了,但有一种情况数据不对,就是上一次入库数量还没出完,这次又入库,然后再出库一部分,这时候计算不对。比如下列数据,查询2004-01-08日库龄,按您的SQL计算是数量为2,库龄为3天,正确应当是数量为3,库龄为3天。

product_id(产品代码) inoutdate(出入库日期) qty(数量)
001 2004-01-01 10
001 2004-01-03 -8
001 2004-01-04 -1
001 2004-01-05 5
001 2004-01-07 -3

该怎么改进,还请指点,谢谢!
victorycyz 2004-07-22
  • 打赏
  • 举报
回复

declare @dt datetime,@pid char(3)
set @dt='2004-01-06'
set @pid='001'

declare @p table ( pid char(3),iodt datetime, qty int)

insert @p select '001', '2004-01-01', 10
union select '001', '2004-01-03', -8
union select '001', '2004-01-04', -1
union select '001', '2004-01-05', 5
union select '001', '2004-01-07', -6
union select '002', '2004-01-06', 20

select *
from ( select pid,
datediff(day,iodt,@dt) as 库龄,
qty+( select isnull(sum(qty),0)
from @p
where pid=@pid and iodt>a.iodt and iodt<=@dt and qty<0
)
as 数量
from @p a
where pid=@pid and iodt<=@dt
) b
where 数量>0

prcgolf 2004-07-22
  • 打赏
  • 举报
回复
UP
计算机论坛开发毕业设计 目 录 绪论 1 1 计算机论坛的调查及初步分析 2 1.1计算机论坛的开发背景 2 1.1.1 项目背景 2 1.1.2 项目的选题意义 2 1.2 关于开发工具的描述 3 1.3 计算机论坛的需求分析 6 1.3.1 需要解决的问题 6 1.3.2系统目标 6 2 系统分析 7 2.1 系统的功能分析 7 2.2 系统的用况图 7 3 系统设计 8 3.1 功能设计 8 3.1.1 登录注册模块 8 3.1.2用户发帖模块 9 3.1.3用户回帖模块 9 3.1.4浏览帖子模块 9 3.1.5管理员信息模块 9 3.1.6用户搜索模块 9 3.2业务流程图 9 3.3数据库设计 10 3.3.1 数据库概念设计 10 3.3.2 数据库概要设计 10 3.3.3 数据库物理设计 10 3.4 代码设计 12 3.4.1 会员注册 10 3.4.2 会员登入 13 3.4.3 会员发帖 14 3.4.4 会员查找 15 4 系统实现 17 4.1 用户注册登入 17 4.2 注册用户发帖 18 4.3 注册用户浏览帖子 19 4.4 注册用户回帖 20 4.5管理会员信息 21 4.6主界面 21 结论 23 参考文献 24 致谢 25 绪论 论坛系统是互联网上一种人与人之间交互的必备工具。界面主要以文字为主,提供一 个信息交流的空间,它开辟了一块空间供用户读取信息、讨论问题。早期的论坛系统只 提供消息投递和阅读功能,如今的论坛系统允许用户之间分享工具软件、技术文档等资 源。如何设计、建立一个经济、实惠、全面、高效、稳定的论坛系统,是每个开发论坛 系统的程序员必须要考虑的问题,在本系统上,网站浏览者可以畅所欲言,任何问题都 可以在这里交流,它的最大优点就是自由平等、快捷互动。一个成功的论坛系统可大大 提高承载此论坛的网站点击率,使企业的用户加入到产品、服务等内容的讨论上来,起 到收集反馈资料的作用,对企业战略发展有着很好的参考作用。 本文档主要论述了开发一个简单的网上在线论坛系统所用到的关键技术和方法。其中 运用了ASP.NET技术、SQL SERVER数据库、一些数据库控件的运用等等, 对上述技术的实现方法进行了详细的讨论。在WEB 服务器上,利用ASP.NET技术等技术,实现了一个很简单的网上在线论坛系统,并详细讨论 了该系统的结构及其实现过程。具有显示版面、查看版面、查看贴子、查看发表的贴子 、查看跟帖内容、用户注册、用户登入、发表贴子、回复贴子、进入后台等功能,在设 计的过程中力求界面友好、简洁、易于操作。代码部分尽量避免逻辑错误,算法设计简 单合理,尽量使程序具有较好的可读性,有利于其他的设计者对程序的阅读;力求对数 据库的操作安全稳定,尽量避免数据库异常,并要保证查询的快速无误。保证程序的逻 辑结构,编程时多注意使用通用函数。 1 计算机论坛的调查及初步分析 1.1 计算机论坛的开发背景 1.1.1 项目背景 本论坛是在.net framework框架下,采用c#语言开发的一个网站。它提供一块公共电子白板,每个用户都 可以在上面书,可发布信息或提出看法。电子公告牌按不同的主题、分主题分成很多 个布告栏,布告栏的设立的依据是大多数论坛使用者的要求和喜好,使用者可以阅读他 人关于某个主题的最新看法,也可以将自己的想法毫无保留地贴到公告栏中。在论坛里 ,人们之间的交流打破了时间、空间的限制。在与别人进行交往时,无须考虑自身的年 龄、学历、知识、社会地位、财富、外貌、健康状况,而这些条件往往是人们在其他交 流形式中无可回避的。同样地,也无从知道交谈的对方的真是社会身份。这样,参与论 坛的人可以处于一个平等的位置与其他人进行任何问题的探讨。虽然谈话的双方素不相 识,却可以亲近地交谈。这对于现在的所有其他交流方式来说是不可能的。论坛站往往 是由一些有志于此道的爱好者建立,对所有人都免费开放。而且,由于论坛的参与人众 多,因此各方面的话题都不乏热心者。可以说,在论坛上可以找到任何你感兴趣的话题 。在论坛上可以不考虑空间的差异,可以与任何一个志趣相投的人进行交谈。论坛一个 非常重要的特点就是传输纯文本信息,数据量小,交互的速度也比较快,因此它的更新 速度也非常地快。在其他很多方面,论坛同样也起着非常重要的作用。论坛正以其独特 的魅力,吸引着众多的网络用户。本毕业设计所采用的,称为浏览器——服务器的B/S结构 应用系统,它的特点是在客户端直接采用了功能强大的浏览器软件作为界面,其优点在 于软件开发效率高,客户端不受操作平台的限制、也不受地域的限制,网络传输量少, 既适用于局域网,更适用于Internet,而且投资小、见效快,这是一个基于asp.net的论 坛,基本上涵盖了论坛的一些功能. 1.1.2 项目

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧