库存量问题,希望得到高手指点。

zwzgood 2009-09-28 09:04:15

/*
日期 产品编号 入库数 出库数
2009-09-16 10:53:47.000 101202 3000 2000
2009-09-16 11:07:17.000 100203 100 35
2009-09-18 10:45:59.000 101202 0 198
2009-09-18 11:20:43.000 100203 0 54
2009-09-23 00:00:00.000 100203 10000 0

希望得到的每日库存量的汇总
日期 产品编号 入库数 出库数 库存量
2009-09-16 10:53:47.000 101202 3000 2000 1000
2009-09-16 11:07:17.000 100203 100 35 65
2009-09-18 10:45:59.000 101202 0 198 812
2009-09-18 11:20:43.000 100203 0 54 11
2009-09-23 00:00:00.000 100203 10000 0 10011
*/

请教高手,这个查询我感觉挺难的,挺头痛。希望高手给指点指点。
...全文
79 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zwzgood 2009-09-28
  • 打赏
  • 举报
回复
论坛上真是高手如云,一瞬间就把我头痛几天的问题解决了,厉害!
结帖放分。谢谢各位!
zwzgood 2009-09-28
  • 打赏
  • 举报
回复
to guguda2008
似乎不对,得加上产品编号。另外感觉查询速度很慢,有没有速度快一些的查询方式?还是我的表设计有问题?
其它高手的我再试试,
soft_wsx 2009-09-28
  • 打赏
  • 举报
回复
我是这样算的

库存数=本期入库-本期出库+上期结存数量
--小F-- 2009-09-28
  • 打赏
  • 举报
回复
直接8楼了
--小F-- 2009-09-28
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :fredrickhu(我是小F,向高手学习)
-- Date :2009-09-28 09:13:14
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([日期] datetime,[产品编号] int,[入库数] int,[出库数] int)
insert [tb]
select '2009-09-16 10:53:47.000',101202,3000,2000 union all
select '2009-09-16 11:07:17.000',100203,100,35 union all
select '2009-09-18 10:45:59.000',101202,0,198 union all
select '2009-09-18 11:20:43.000',100203,0,54 union all
select '2009-09-23 00:00:00.000',100203,10000,0
--------------开始查询--------------------------
select
*,
(select sum(入库数-出库数)) from tb t2 where t2.日期<=t1.日期 and t2.[产品编号]=t1.[产品编号])
from
tb t1
order by
t1.日期 asc

----------------结果----------------------------
/* 日期 产品编号 入库数 出库数
----------------------- ----------- ----------- ----------- -----------
2009-09-16 10:53:47.000 101202 3000 2000 1000
2009-09-16 11:07:17.000 100203 100 35 65
2009-09-18 10:45:59.000 101202 0 198 802
2009-09-18 11:20:43.000 100203 0 54 11
2009-09-23 00:00:00.000 100203 10000 0 10011

(5 行受影响)

*/
soft_wsx 2009-09-28
  • 打赏
  • 举报
回复
/*
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) Jul 9 2008 14:43:34 Copyright (c)
1988-2008 Microsoft Corporation Enterprise Evaluation Edition on Windows NT 5.1 <X86>
(Build 2600: Service Pack 3)
愿和大家共同进步
如有雷同、实属巧合
●●●●●2009-09-28 09:18:04.763●●●●●
 ★★★★★soft_wsx★★★★★
*/
--


if object_ID('TB') IS NOT NULL DROP TABLE TB
go
create table tb(日期 datetime, 产品编号 nvarchar(10), 入库数 decimal(14,2), 出库数 decimal(14,2))
go
insert tb
select
'2009-09-16 10:53:47.000', '101202', 3000 , 2000 union all select
'2009-09-16 11:07:17.000', '100203', 100 , 35 union all select
'2009-09-18 10:45:59.000', '101202', 0 ,198 union all select
'2009-09-18 11:20:43.000', '100203', 0 ,54 union all select
'2009-09-23 00:00:00.000', '100203', 10000 , 0

select *,库存数=入库数-出库数+isnull((select SUM(入库数)-SUM(出库数) from tb where 产品编号=a.产品编号 and 日期<a.日期),0)
from tb a
/*
日期 产品编号 入库数 出库数 库存数
2009-09-16 10:53:47.000 101202 3000.00 2000.00 1000.00
2009-09-16 11:07:17.000 100203 100.00 35.00 65.00
2009-09-18 10:45:59.000 101202 0.00 198.00 802.00
2009-09-18 11:20:43.000 100203 0.00 54.00 11.00
2009-09-23 00:00:00.000 100203 10000.00 0.00 10011.00
*/
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 liangck 的回复:]
SQL code-------------------------------------
-- Author : liangCK 梁爱兰
-- Comment: 小梁 爱 兰儿
-- Date : 2009-09-28 09:11:44
---------------------------------------> 生成测试数据: @TDECLARE@TTABLE (日期datetime,产品编号int,入库数int,出库数int)INSERTINTO@TSELECT'2009-09-16 10:53:47.000',101202,3000,2000UNIONALLSELECT'2009-09-16 11:07:17.000',100203,100,35UNIONALLSELECT'2009-09-18 10:45:59.000',101202,0,198UNIONALLSELECT'2009-09-18 11:20:43.000',100203,0,54UNIONALLSELECT'2009-09-23 00:00:00.000',100203,10000,0--SQL查询如下:SELECT*,库存=(SELECTSUM(入库数-出库数)FROM@TWHERE 产品编号= A.产品编号AND 日期<= A.日期)FROM@TAS A/*
日期 产品编号 入库数 出库数 库存
----------------------- ----------- ----------- ----------- -----------
2009-09-16 10:53:47.000 101202 3000 2000 1000
2009-09-16 11:07:17.000 100203 100 35 65
2009-09-18 10:45:59.000 101202 0 198 802
2009-09-18 11:20:43.000 100203 0 54 11
2009-09-23 00:00:00.000 100203 10000 0 10011

(5 行受影响)*/
[/Quote]
刚看到,就被抢了。
guguda2008 2009-09-28
  • 打赏
  • 举报
回复
没看到产品编号
用小卒和梁哥的
liangCK 2009-09-28
  • 打赏
  • 举报
回复
-------------------------------------
-- Author : liangCK 梁爱兰
-- Comment: 小梁 爱 兰儿
-- Date : 2009-09-28 09:11:44
-------------------------------------

--> 生成测试数据: @T
DECLARE @T TABLE (日期 datetime,产品编号 int,入库数 int,出库数 int)
INSERT INTO @T
SELECT '2009-09-16 10:53:47.000',101202,3000,2000 UNION ALL
SELECT '2009-09-16 11:07:17.000',100203,100,35 UNION ALL
SELECT '2009-09-18 10:45:59.000',101202,0,198 UNION ALL
SELECT '2009-09-18 11:20:43.000',100203,0,54 UNION ALL
SELECT '2009-09-23 00:00:00.000',100203,10000,0

--SQL查询如下:

SELECT
*,库存=(SELECT SUM(入库数-出库数) FROM @T
WHERE 产品编号 = A.产品编号
AND 日期 <= A.日期)
FROM @T AS A

/*
日期 产品编号 入库数 出库数 库存
----------------------- ----------- ----------- ----------- -----------
2009-09-16 10:53:47.000 101202 3000 2000 1000
2009-09-16 11:07:17.000 100203 100 35 65
2009-09-18 10:45:59.000 101202 0 198 802
2009-09-18 11:20:43.000 100203 0 54 11
2009-09-23 00:00:00.000 100203 10000 0 10011

(5 行受影响)

*/
华夏小卒 2009-09-28
  • 打赏
  • 举报
回复

if object_id('tb') is not null drop table tb
go
create table tb(日期 datetime,产品编号 int, 入库数 int, 出库数 int)
insert tb select
'2009-09-16 10:53:47.000', 101202 , 3000 , 2000 union all select
'2009-09-16 11:07:17.000', 100203 , 100 , 35 union all select
'2009-09-18 10:45:59.000', 101202 , 0 ,198 union all select
'2009-09-18 11:20:43.000', 100203 , 0 ,54 union all select
'2009-09-23 00:00:00.000' , 100203 , 10000, 0

select 日期 , 产品编号,入库数, 出库数,
库存量=(select sum(入库数)-sum(出库数) from tb where 产品编号=t.产品编号 and 日期<=t.日期)
from tb t

日期 产品编号 入库数 出库数 库存量
----------------------- ----------- ----------- ----------- -----------
2009-09-16 10:53:47.000 101202 3000 2000 1000
2009-09-16 11:07:17.000 100203 100 35 65
2009-09-18 10:45:59.000 101202 0 198 802
2009-09-18 11:20:43.000 100203 0 54 11
2009-09-23 00:00:00.000 100203 10000 0 10011

(5 行受影响)
zwzgood 2009-09-28
  • 打赏
  • 举报
回复
to guguda2008
谢谢,我试试
guguda2008 2009-09-28
  • 打赏
  • 举报
回复
SELECT *
,(
SELECT SUM(入库数-出库数) FROM TB T2
WHERE T2.日期<=T1.日期
)
FROM TB T1 ORDER BY T1.日期 ASC

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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