游标之数据排序

由于在写“协同平台”要将主、细表的里内容在一个里进有序排序,本人认为最好用存储过程来实现,这样可以提高客户端的浏览速度         ^_^
CREATE            PROCEDURE Aipetech_sp_PoOrderExeStatus
@InterID int
 
AS
--创建一个临时表,用来生成"未完采购订单的执行情况"

Create Table #Aipetech_T002
    (
    采购订单内码 
int,
    分录号 
int,
    物料内码 
int,
    物料编码 
varchar(80),
    物料名称 
varchar(80),
    收货日期 
datetime,
    入库单号 
varchar(80),
    单位 
varchar(30),
    数量 
decimal(13),
    入库数量 
decimal(13default 0,
    未完成数量 
decimal(13default 0,
    交货日期 
datetime,
    备注 
varchar(255)
    )

insert into #Aipetech_T002
            (采购订单内码,分录号,物料内码,物料编码,物料名称,单位,数量,交货日期,备注)
            
select 采购订单内码,分录号,物料内码,物料编码,物料名称,单位,数量,交货日期,备注 from Aipetech_v_PoOrderEntry where 采购订单内码=@InterID
--select * from #Aipetech_T002
Create Table #Aipetech_T003
    (
    采购订单内码 
int,    
    物料内码 
int,
    入库数量 
int)

insert into #Aipetech_T003
    (采购订单内码,物料内码,入库数量)
select 采购订单内码,物料内码,sum(辅助实收数量) as 辅助实收数量   from aipetech_v_icstockbill where ((采购订单内码=@InterIDand(入库单号 LIKE 'win%')) group by 物料内码,采购订单内码

--select * from #Aipetech_T003

--计算入库数量
update #Aipetech_T002 set 入库数量=A003.入库数量 from #aipetech_t003 a003,#aipetech_t002 a002 where a002.物料内码=a003.物料内码

--计算未完成数量
update #Aipetech_T002 set 未完成数量=数量-入库数量

insert into #Aipetech_T002
            (物料名称,入库数量,未完成数量)
            
select '合计:',sum(入库数量),sum(未完成数量) from #Aipetech_t002


--select 采购订单内码,分录号,物料内码,物料编码,物料名称,入库单号,收货日期,单位,数量,入库数量,未完成数量,交货日期,备注 from #Aipetech_t002 a002
--
union
--
select 采购订单内码,1,物料内码,null,null,入库单号,单据日期,null,null,辅助实收数量,null,null,null from aipetech_v_icstockbill avi where ((采购订单内码=@InterID) and(入库单号 LIKE 'win%'))
--
order by 分录号 


--以下用游标来进行主细表的记录增加到#Aipetech_T004表中
Create Table #Aipetech_T004
    (
    采购订单内码 
int,
    分录号 
int,
    物料内码 
int,
    物料编码 
varchar(80),
    物料名称 
varchar(80),
    收货日期 
datetime,
    入库单号 
varchar(80),
    单位 
varchar(30),
    数量 
decimal(13),
    入库数量 
decimal(13default 0,
    未完成数量 
decimal(13default 0,
    交货日期 
datetime,
    备注 
varchar(255)
    )

declare @T1 int,@T2 int,@T3 int,@T4 varchar(80),@T5 varchar(80),@T6 datetime,@T7 varchar(80),
@T8 varchar(30),@T9 decimal(13),@T10 decimal(13),@T11 decimal(13),@T12 datetime,@T13 varchar(255)

declare A_T004_cur scroll cursor for select * from #Aipetech_T002
open A_T004_cur
Fetch first from A_T004_cur into @T1,@T2,@T3,@T4,@T5,@T6,@T7,@T8,@T9,@T10,@T11,@T12,@T13

while @@fetch_status=0
begin
insert into #Aipetech_T004 values(@T1,@T2,@T3,@T4,@T5,@T6,@T7,@T8,@T9,@T10,@T11,@T12,@T13)
insert into #Aipetech_T004
select 采购订单内码,@T2,物料内码,物料代码,物料名称,单据日期,入库单号,@T8,null,辅助实收数量,null,null,null from aipetech_v_icstockbill avi where ((采购订单内码=@InterIDand(入库单号 LIKE 'win%')and (物料内码=@T3))
Fetch next from A_T004_cur into @T1,@T2,@T3,@T4,@T5,@T6,@T7,@T8,@T9,@T10,@T11,@T12,@T13
end

close A_T004_cur
deallocate A_T004_cur


--select * from #aipetech_t002

select * from #Aipetech_T004
--select 采购订单内码,1,物料内码,null,null,入库单号,单据日期,null,null,辅助实收数量,null,null,null from aipetech_v_icstockbill avi where ((采购订单内码=@InterID) and(入库单号 LIKE 'win%'))


Drop Table #Aipetech_T002
Drop Table #Aipetech_T003
Drop Table #Aipetech_T004
GO
原文地址:https://www.cnblogs.com/aipeli/p/262591.html