22,209
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE [dbo].[Stock](
[StockID] [int] IDENTITY(1,1) NOT NULL,
[PartName] [varchar](50) NULL,
[Stock] [int] NULL,
[DateValue] [datetime] NULL
) ON [PRIMARY]
GO
INSERT [dbo].[Stock] ([StockID], [PartName], [Stock], [DateValue]) VALUES (1, N'A', 100, CAST(0x00009DB700000000 AS DateTime))
INSERT [dbo].[Stock] ([StockID], [PartName], [Stock], [DateValue]) VALUES (2, N'B', -50, CAST(0x00009DB700000000 AS DateTime))
INSERT [dbo].[Stock] ([StockID], [PartName], [Stock], [DateValue]) VALUES (3, N'A', 60, CAST(0x00009DBE00000000 AS DateTime))
INSERT [dbo].[Stock] ([StockID], [PartName], [Stock], [DateValue]) VALUES (4, N'B', 53, CAST(0x00009DBE00000000 AS DateTime))
INSERT [dbo].[Stock] ([StockID], [PartName], [Stock], [DateValue]) VALUES (5, N'B', 41, CAST(0x00009DC500000000 AS DateTime))
INSERT [dbo].[Stock] ([StockID], [PartName], [Stock], [DateValue]) VALUES (6, N'A', 99, CAST(0x00009DC500000000 AS DateTime))
-- 少了一点东东
declare @tab table
(StockID int,PartName varchar(50),Stock int,DateValue datetime,
Allocate_Quantity int,Allocated int,Allocated_Accumulated int);
declare @StockID_A int, @PartName_A varchar(50), @Stock_A int,@DateValue datetime;
declare @StockID_B int, @PartName_B varchar(50), @Stock_B int;
-- 存储上次剩余的库存
declare @Accumulated_A int, @Accumulated_B int;
-- 存储现在的库存
declare @Allocated_Accumulated_A int, @Allocated_Accumulated_B int;
select @Allocated_Accumulated_A=0, @Allocated_Accumulated_B=0;
declare @Allocated_Accumulated int;
declare @Allocated int, @Allocate_Quantity int;
declare c cursor local
for select * from Stock order by DateValue,PartName;
open c;
fetch next from c into @StockID_A ,@PartName_A,@Stock_A,@DateValue;
fetch next from c into @StockID_B ,@PartName_B,@Stock_B,@DateValue;
while @@FETCH_STATUS=0
begin
select @Accumulated_A=@Allocated_Accumulated_A, @Accumulated_B=@Allocated_Accumulated_B;
set @Allocated_Accumulated=@Stock_A+@Stock_B+@Accumulated_A+@Accumulated_B+100;
set @Allocated_Accumulated_A=@Allocated_Accumulated/2;
set @Allocated=@Allocated_Accumulated_A-@Accumulated_A;
set @Allocate_Quantity=@Allocated-@Stock_A;
if @Allocate_Quantity<0
begin
insert into @tab values(@StockID_A,@PartName_A,@Stock_A,@DateValue,
0,@Stock_A,@Stock_A+@Accumulated_A);
set @Allocated_Accumulated_A=@Stock_A+@Accumulated_A;
end
else if @Allocate_Quantity>100
begin
insert into @tab values(@StockID_A,@PartName_A,@Stock_A,@DateValue,
100,@Stock_A+100,@Stock_A+@Accumulated_A+100);
set @Allocated_Accumulated_A=@Stock_A+@Accumulated_A+100;
end
else
insert into @tab values(@StockID_A,@PartName_A,@Stock_A,@DateValue,
@Allocate_Quantity,@Allocated,@Allocated_Accumulated_A);
set @Allocated_Accumulated_B=@Allocated_Accumulated-@Allocated_Accumulated_A;
set @Allocated=@Allocated_Accumulated_B-@Accumulated_B;
set @Allocate_Quantity=@Allocated-@Stock_B;
if @Allocate_Quantity<0
begin
insert into @tab values(@StockID_B,@PartName_B,@Stock_B,@DateValue,
0,@Stock_B,@Stock_B+@Accumulated_B);
set @Allocated_Accumulated_B=@Stock_B+@Accumulated_B;
end
else if @Allocate_Quantity>100
begin
insert into @tab values(@StockID_B,@PartName_B,@Stock_B,@DateValue,
100,@Stock_B+100,@Stock_B+@Accumulated_B+100);
set @Allocated_Accumulated_B=@Stock_B+@Accumulated_B+100;
end
else
insert into @tab values(@StockID_B,@PartName_B,@Stock_B,@DateValue,
@Allocate_Quantity,@Allocated,@Allocated_Accumulated_B);
fetch next from c into @StockID_A ,@PartName_A,@Stock_A,@DateValue;
fetch next from c into @StockID_B ,@PartName_B,@Stock_B,@DateValue;
end
close c;
deallocate c;
select * from @tab;
/*
1 A 100 2010-07-18 00:00:00.000 0 100 100
2 B -50 2010-07-18 00:00:00.000 100 50 50
3 A 60 2010-07-25 00:00:00.000 21 81 181
4 B 53 2010-07-25 00:00:00.000 79 132 182
5 A 99 2010-08-01 00:00:00.000 21 120 301
6 B 41 2010-08-01 00:00:00.000 79 120 302
*/
if OBJECT_ID('dbo.stock') is not null
drop table dbo.stock
go
CREATE TABLE [dbo].[Stock](
[StockID] [int] NOT NULL,
[PartName] [varchar](50) NULL,
[Stock] [int] NULL,
[DateValue] [datetime] NULL
) ON [PRIMARY];
GO
INSERT [dbo].[Stock] VALUES (1, N'A', 100, '2010-7-18');
INSERT [dbo].[Stock] VALUES (2, N'B', -50, '2010-7-18');
INSERT [dbo].[Stock] VALUES (3, N'A', 60, '2010-7-25');
INSERT [dbo].[Stock] VALUES (4, N'B', 53, '2010-7-25');
INSERT [dbo].[Stock] VALUES (5, N'A', 99, '2010-8-1');
INSERT [dbo].[Stock] VALUES (6, N'B', 41, '2010-8-1');
go
--select * from Stock;
declare @tab table
(StockID int,PartName varchar(50),Stock int,DateValue datetime,
Allocate_Quantity int,Allocated int,Allocated_Accumulated int);
declare @StockID_A int, @PartName_A varchar(50), @Stock_A int,@DateValue datetime;
declare @StockID_B int, @PartName_B varchar(50), @Stock_B int;
-- 存储上次剩余的库存
declare @Accumulated_A int, @Accumulated_B int;
-- 存储当天的库存
declare @Allocated_Accumulated_A int, @Allocated_Accumulated_B int;
select @Allocated_Accumulated_A=0, @Allocated_Accumulated_B=0;
declare @Allocated_Accumulated int;
declare @Allocated int, @Allocate_Quantity int;
declare c cursor local
for select * from Stock order by DateValue,PartName;
open c;
fetch next from c into @StockID_A ,@PartName_A,@Stock_A,@DateValue;
fetch next from c into @StockID_B ,@PartName_B,@Stock_B,@DateValue;
while @@FETCH_STATUS=0
begin
select @Accumulated_A=@Allocated_Accumulated_A, @Accumulated_B=@Allocated_Accumulated_B;
set @Allocated_Accumulated=@Stock_A+@Stock_B+@Accumulated_A+@Accumulated_B+100;
set @Allocated_Accumulated_A=@Allocated_Accumulated/2;
set @Allocated=@Allocated_Accumulated_A-@Accumulated_A;
set @Allocate_Quantity=@Allocated-@Stock_A;
if @Allocate_Quantity<0
insert into @tab values(@StockID_A,@PartName_A,@Stock_A,@DateValue,
0,@Stock_A,@Stock_A+@Accumulated_A);
else if @Allocate_Quantity>100
insert into @tab values(@StockID_A,@PartName_A,@Stock_A,@DateValue,
100,@Stock_A+100,@Stock_A+@Accumulated_A+100);
else
insert into @tab values(@StockID_A,@PartName_A,@Stock_A,@DateValue,
@Allocate_Quantity,@Allocated,@Allocated_Accumulated_A);
set @Allocated_Accumulated_B=@Allocated_Accumulated-@Allocated_Accumulated_A;
set @Allocated=@Allocated_Accumulated_B-@Accumulated_B;
set @Allocate_Quantity=@Allocated-@Stock_B;
if @Allocate_Quantity<0
insert into @tab values(@StockID_B,@PartName_B,@Stock_B,@DateValue,
0,@Stock_B,@Stock_B+@Accumulated_B);
else if @Allocate_Quantity>100
insert into @tab values(@StockID_B,@PartName_B,@Stock_B,@DateValue,
100,@Stock_B+100,@Stock_B+@Accumulated_B+100);
else
insert into @tab values(@StockID_B,@PartName_B,@Stock_B,@DateValue,
@Allocate_Quantity,@Allocated,@Allocated_Accumulated_B);
fetch next from c into @StockID_A ,@PartName_A,@Stock_A,@DateValue;
fetch next from c into @StockID_B ,@PartName_B,@Stock_B,@DateValue;
end
close c;
deallocate c;
select * from @tab;
/*
1 A 100 2010-07-18 00:00:00.000 0 100 100
2 B -50 2010-07-18 00:00:00.000 100 50 50
3 A 60 2010-07-25 00:00:00.000 46 106 181
4 B 53 2010-07-25 00:00:00.000 54 107 182
5 A 99 2010-08-01 00:00:00.000 21 120 301
6 B 41 2010-08-01 00:00:00.000 79 120 302
*/