zoukankan      html  css  js  c++  java
  • 游标之数据排序

    由于在写“协同平台”要将主、细表的里内容在一个里进有序排序,本人认为最好用存储过程来实现,这样可以提高客户端的浏览速度         ^_^
    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
  • 相关阅读:
    LVS基于DR模式负载均衡的配置
    Linux源码安装mysql 5.6.12 (cmake编译)
    HOSt ip is not allowed to connect to this MySql server
    zoj 3229 Shoot the Bullet(无源汇上下界最大流)
    hdu 3987 Harry Potter and the Forbidden Forest 求割边最少的最小割
    poj 2391 Ombrophobic Bovines(最大流+floyd+二分)
    URAL 1430 Crime and Punishment
    hdu 2048 神、上帝以及老天爷(错排)
    hdu 3367 Pseudoforest(最大生成树)
    FOJ 1683 纪念SlingShot(矩阵快速幂)
  • 原文地址:https://www.cnblogs.com/aipeli/p/262591.html
Copyright © 2011-2022 走看看