22,233
社区成员
发帖
与我相关
我的任务
分享
declare @t table(仓库 varchar(10),日期 datetime, 单号 varchar(10), 货品 varchar(10), 单位 varchar(10), 期初 int, 收入 int, 发出 int, 结存 int)
insert @t select '半成品仓','2009-3-1','期初','16081D','个',300,0,0,0
insert @t select '半成品仓','2009-3-1',90301001,'16081D','个',0,50,0,0
insert @t select '半成品仓','2009-3-2',90301002,'16081D','个',0,0,30,0
insert @t select '半成品仓','2009-3-15',90315003,'16081D','个',0,20,0,0
update @t set
期初=(select sum(期初+收入-发出) from @t where case when 单号='期初' then 0 else 单号 end <= case when t.单号='期初' then 0 else t.单号 end)-收入+发出,
结存=(select sum(期初+收入-发出) from @t where case when 单号='期初' then 0 else 单号 end <= case when t.单号='期初' then 0 else t.单号 end)
from @t t
select * from @t
仓库 日期 单号 货品 单位 期初 收入 发出 结存
---------- ----------------------- ---------- ---------- ---------- ----------- ----------- ----------- -----------
半成品仓 2009-03-01 00:00:00.000 期初 16081D 个 300 0 0 300
半成品仓 2009-03-01 00:00:00.000 90301001 16081D 个 300 50 0 350
半成品仓 2009-03-02 00:00:00.000 90301002 16081D 个 350 0 30 320
半成品仓 2009-03-15 00:00:00.000 90315003 16081D 个 320 20 0 340
(4 行受影响)
不好意思,发看到你的期初,更改一下.---------------------------------
-- Author: liangCK 小梁
---------------------------------
--> 生成测试数据: @T
DECLARE @T TABLE (仓库 VARCHAR(8),日期 DATETIME,单号 VARCHAR(9),货品 VARCHAR(6),单位 VARCHAR(2),期初 INT,收入 INT,发出 INT,结存 INT)
INSERT INTO @T
SELECT '半成品仓','2009-03-01','期初','16081D','个',300,0,0,0 UNION ALL
SELECT '半成品仓','2009-03-01','090301001','16081D','个',0,50,0,0 UNION ALL
SELECT '半成品仓','2009-03-02','090301002','16081D','个',0,0,30,0 UNION ALL
SELECT '半成品仓','2009-03-15','090315003','16081D','个',0,20,0,0
--SQL查询如下:
DECLARE @IS_期初 BIT
DECLARE @期初 INT,@结存 INT;
SELECT @期初=0,@结存=0
UPDATE @T SET
@期初=CASE WHEN 单号='期初' THEN 期初
ELSE @结存 END,
@结存=CASE WHEN 单号='期初' THEN @期初
ELSE @期初+收入-发出 END,
期初=@期初,
结存=@结存
SELECT * FROM @T
/*
仓库 日期 单号 货品 单位 期初 收入 发出 结存
-------- ----------------------- --------- ------ ---- ----------- ----------- ----------- -----------
半成品仓 2009-03-01 00:00:00.000 期初 16081D 个 300 0 0 300
半成品仓 2009-03-01 00:00:00.000 090301001 16081D 个 300 50 0 350
半成品仓 2009-03-02 00:00:00.000 090301002 16081D 个 350 0 30 320
半成品仓 2009-03-15 00:00:00.000 090315003 16081D 个 320 20 0 340
(4 行受影响)
*/
declare @t table(仓库 varchar(10),日期 datetime, 单号 varchar(10), 货品 varchar(10), 单位 varchar(10), 期初 int, 收入 int, 发出 int, 结存 int)
insert @t select '半成品仓','2009-3-1','期初','16081D','个',300,0,0,0
insert @t select '半成品仓','2009-3-1',90301001,'16081D','个',0,50,0,0
insert @t select '半成品仓','2009-3-2',90301002,'16081D','个',0,0,30,0
insert @t select '半成品仓','2009-3-15',90315003,'16081D','个',0,20,0,0
update @t set 结存=(select
sum(期初+收入-发出) from @t where case when 单号='期初' then 0 else 单号 end <= case when t.单号='期初' then 0 else t.单号 end)
from @t t
select * from @t
仓库 日期 单号 货品 单位 期初 收入 发出 结存
---------- ----------------------- ---------- ---------- ---------- ----------- ----------- ----------- -----------
半成品仓 2009-03-01 00:00:00.000 期初 16081D 个 300 0 0 300
半成品仓 2009-03-01 00:00:00.000 90301001 16081D 个 0 50 0 350
半成品仓 2009-03-02 00:00:00.000 90301002 16081D 个 0 0 30 320
半成品仓 2009-03-15 00:00:00.000 90315003 16081D 个 0 20 0 340
(4 行受影响)
你要的结果是:
---------------------------------
-- Author: liangCK 小梁
---------------------------------
--> 生成测试数据: @T
DECLARE @T TABLE (仓库 VARCHAR(8),日期 DATETIME,单号 VARCHAR(10),货品 VARCHAR(6),单位 VARCHAR(2),期初 INT,收入 INT,发出 INT,结存 INT)
INSERT INTO @T
SELECT '半成品仓','2009-03-01','期初','16081D','个',300,0,0,0 UNION ALL
SELECT '半成品仓','2009-03-01','090301001','16081D','个',0,50,0,0 UNION ALL
SELECT '半成品仓','2009-03-01','S090301002','16081D','个',0,15,0,0 UNION ALL
SELECT '半成品仓','2009-03-01','A090301003','16081D','个',0,0,20,0 UNION ALL
SELECT '半成品仓','2009-03-01','K90301004','16081D','个',0,0,10,0 UNION ALL
SELECT '半成品仓','2009-03-02','090301002','16081D','个',0,0,30,0 UNION ALL
SELECT '半成品仓','2009-03-15','090315003','16081D','个',0,20,0,0
--SQL查询如下:
DECLARE @IS_期初 BIT
DECLARE @期初 INT,@结存 INT;
SELECT @期初=0,@结存=0
UPDATE @T SET
@期初=CASE WHEN 单号='期初' THEN 期初
ELSE @结存 END,
@结存=CASE WHEN 单号='期初' THEN @期初
ELSE @期初+收入-发出 END,
期初=@期初,
结存=@结存
SELECT * FROM @T
/*
仓库 日期 单号 货品 单位 期初 收入 发出 结存
-------- ----------------------- ---------- ------ ---- ----------- ----------- ----------- -----------
半成品仓 2009-03-01 00:00:00.000 期初 16081D 个 300 0 0 300
半成品仓 2009-03-01 00:00:00.000 090301001 16081D 个 300 50 0 350
半成品仓 2009-03-01 00:00:00.000 S090301002 16081D 个 350 15 0 365
半成品仓 2009-03-01 00:00:00.000 A090301003 16081D 个 365 0 20 345
半成品仓 2009-03-01 00:00:00.000 K90301004 16081D 个 345 0 10 335
半成品仓 2009-03-02 00:00:00.000 090301002 16081D 个 335 0 30 305
半成品仓 2009-03-15 00:00:00.000 090315003 16081D 个 305 20 0 325
(7 行受影响)
*/