• 游标之数据排序


    由于在写“协同平台”要将主、细表的里内容在一个里进有序排序,本人认为最好用存储过程来实现,这样可以提高客户端的浏览速度         ^_^
    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
  • 相关阅读:
    Web 服务器配置
    Web 浏览
    C++ Web 编程
    C++ 多线程
    C++ 信号处理
    C++ 预处理器
    C++ 模板
    C++ 命名空间
    C++ 动态内存
    C++ 异常处理
  • 原文地址:https://www.cnblogs.com/aipeli/p/262591.html
Copyright © 2020-2023  润新知