表结构如下:
sprk(dspid int,dspcode char(12),dspck char(12),ruku decimal(10,3),chuku decimal(10,3),jiecun decimal(10,3),riqi char(10))
primary key [dspid]
riqi       dspid dspcode    dspck       ruku   chuku   jiecun
2006-01-01 1 11010012 11010012 10 0 50
2006-01-21 2 11010012 11010012 0 30 20
2006-01-21 3 11010012 11010012 10 0 30
2006-02-16 …
 其中, ruku 是表示入库,chuku 表示出库,jiecuny 表示结存
   1.用存储过程来查询某个日期(riqi)的某个商品(dspcode) 的结存  
 2.当更新jiecun 时,可以自动数据插入到其他的表中
 3.写个视图根据dspcode来查询他的交易明细.                     
4.其中数据为商品的业务流水库,以dspid值为业务发生顺序,字段jiecun=上一行的jiecun+本行的ruku-本行的chuku
写一存储过程完成此表的计算逻辑,第一行数据计算时因其上一行不存在以给存储过程传递的参数为准(如表格中的第一行数据其参数即为40)

解决方案 »

  1.   

       1.用存储过程来查询某个日期(riqi)的某个商品(dspcode) 的结存--
    create proc proc_name
    @rq datetime,@dspcode varchar(10),@ret int = 0
    as
       select @ret = jiecun  from sprk where datediff(d,rirq,@rq) = 0 and  dspcode = @dspcode
    go
      

  2.   

     2.当更新jiecun 时,可以自动数据插入到其他的表中 
    --触发器
      

  3.   

    1.用存储过程来查询某个日期(riqi)的某个商品(dspcode) 的结存   
    --好象这两都可以.
    select 结存 = sum(ruku - chuku) from sprk where riqi <= '某日期' and dspcode = '某商品'
    select 结存 = jiecuny from sprk where riqi = '某日期' and dspcode = '某商品'
      

  4.   

    2.当更新jiecun 时,可以自动数据插入到其他的表中 --这个使用触发器实现.大致方法如下,自己参照着改.USE pubs
    IF EXISTS (SELECT name FROM sysobjects
          WHERE name = 'reminder' AND type = 'TR')
       DROP TRIGGER reminder
    GO
    CREATE TRIGGER reminder
    ON titles
    FOR INSERT, UPDATE 
    AS RAISERROR (50009, 16, 10)
    GO
      

  5.   

    3.写个视图根据dspcode来查询他的交易明细.                 
    直接查询即可,不需要视图.select * from sprk where dspcode = '某值'
      

  6.   

    4.其中数据为商品的业务流水库,以dspid值为业务发生顺序,字段jiecun=上一行的jiecun+本行的ruku-本行的chuku 
    写一存储过程完成此表的计算逻辑,第一行数据计算时因其上一行不存在以给存储过程传递的参数为准(如表格中的第一行数据其参数即为40) 参考:例:有一个收支表(szb)如下结构       日期(RQ),...项目(XM),收入,      支出
             2006.10.01       收工资           500
            2006.10.02       付房租                          200
            2006.10.03       购物                              50目标说明:       要用一条SQL语句生成结果集如下(比上表多一个结余)
        每条记录的 结 = 上一条记录的结余+当前记录收入-当前记录支出
         
           日期(RQ),...项目(XM),收入,      支出
            2006.10.01       收工资           500
            2006.10.02       付房租                          200
            2006.10.03       购物                              50declare @t table (
    收支日期RQ datetime,
    收支项目XM varchar(20),
    收入金额SL int,
    支出金额ZC int
    )
    insert @t 
    select '2006.10.01','收工资',500,0 union all
    select '2006.10.02','付房租',0,200 union all
    select '2006.10.03','购物支出',0,50
    select 收支日期RQ , 收支项目XM , 收入金额SL , 支出金额ZC , 结余JY = isnull(收入金额SL - 支出金额ZC ,0) into #temp from @tupdate #temp
    set 结余JY=(select isnull(sum(收入金额SL - 支出金额ZC),0) 
    from #temp tt
    where TT.收支日期RQ<=#temp.收支日期RQ)
    select convert(varchar(10),收支日期RQ,120) as 收支日期RQ , 收支项目XM , 收入金额SL , 支出金额ZC , 结余JY from #tempdrop table #temp
    --结果
    收支日期RQ 收支项目XM 收入金额SL 支出金额ZC 结余JY        
    ---------- ---------- ---------- ---------- ----------- 
    2006-10-01 收工资     500        0          500
    2006-10-02 付房租     0          200        300
    2006-10-03 购物支出   0          50         250(所影响的行数为 3 行)
      

  7.   


    ----表CREATE TABLE [dbo].[sprk] (
    [dspid] [int] NOT NULL ,
    [dspcode] [char] (12) COLLATE Chinese_PRC_CI_AS NULL ,
    [dspck] [char] (12) COLLATE Chinese_PRC_CI_AS NULL ,
    [ruku] [decimal](10, 3) NULL ,
    [chuku] [decimal](10, 3) NULL ,
    [jiecun] [decimal](10, 3) NULL ,
    [riqi] [char] (10) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GOALTER TABLE [dbo].[sprk] WITH NOCHECK ADD 
    CONSTRAINT [PK_sprk] PRIMARY KEY  CLUSTERED 
    (
    [dspid]
    )  ON [PRIMARY] 
    GOInsert Into sprk (riqi,dspid,dspcode,dspck,ruku,chuku,jiecun )
    Select '2006-01-01' ,1 ,11010012 ,11010012 ,10 ,0, 50 
    union 
    select '2006-01-21',2 ,11010012 ,11010012 ,0 ,30 ,20 
    union 
    select '2006-01-21', 3, 11010012, 11010012, 10, 0 ,30 
    GO 其中, ruku 是表示入库,chuku 表示出库,jiecuny 表示结存 
       1.用存储过程来查询某个日期(riqi)的某个商品(dspcode) 的结存   
     2.当更新jiecun 时,可以自动数据插入到其他的表中 
     3.写个视图根据dspcode来查询他的交易明细.                      
    4.其中数据为商品的业务流水库,以dspid值为业务发生顺序,字段jiecun=上一行的jiecun+本行的ruku-本行的chuku 
    写一存储过程完成此表的计算逻辑,第一行数据计算时因其上一行不存在以给存储过程传递的参数为准(如表格中的第一行数据其参数即为40)
    ---1.
    CREATE PROCEDURE  cx @as_ri varchar(100) , @as_sp varchar(100)
     AS
    begin
      select * From sprk  where riqi =  @as_ri  and  dspid = @as_sp 
    end---2 
    CREATE TRIGGER cftj ON [dbo].[sprk] 
    FOR  UPDATE
    AS
    beginend----44
    update sprk
    set jiecun =(select isnull(sum(ruku - chuku),0) 
    from sprk tt
    where TT.riqi<=sprk.riqi)select * from sprk几乎就是这个意思 没有特别相信的代码
      

  8.   


    --4、其中数据为商品的业务流水库,以dspid值为业务发生顺序,字段jiecun=上一行的jiecun+本行的ruku-本行的chuku
    ---try:
    select a.riqi,a.dspid,a.dspcode,a.dspck,a.ruku,a.chuku,jiecun=isnull(b.jiecun,0)+a.ruku-a.chuku from @sprk a left join @sprk b
    on a.dspid=b.dspid+1
      

  9.   

    create table ta(riqi datetime,dspid int, dspcode int,dspck int,ruku int,chuku int,jiecun int)
    insert ta select 
    '2006-01-01', 1, 11010012, 11010012, 10, 0 ,0 union select                          
    '2006-01-21', 2, 11010012, 11010012, 0 ,30, 0  union select
    '2006-01-21', 3, 11010012 ,11010012, 10 ,0 ,0select * from tago
    create proc proc_test
    @ruku int,
    @chuku int,
    @jiecun int
    as
    begin
    update a
        set jiecun = isnull((select sum(ruku + jiecun - chuku) from ta where dspid <= a.dspid),0) +@ruku +@jiecun - @chuku
        from ta a
    end
    goexec proc_test 0,0,40select * from ta
    /*
    (所影响的行数为 3 行)riqi                                                   dspid       dspcode     dspck       ruku        chuku       jiecun      
    ------------------------------------------------------ ----------- ----------- ----------- ----------- ----------- ----------- 
    2006-01-01 00:00:00.000                                1           11010012    11010012    10          0           0
    2006-01-21 00:00:00.000                                2           11010012    11010012    0           30          0
    2006-01-21 00:00:00.000                                3           11010012    11010012    10          0           0(所影响的行数为 3 行)
    (所影响的行数为 3 行)riqi                                                   dspid       dspcode     dspck       ruku        chuku       jiecun      
    ------------------------------------------------------ ----------- ----------- ----------- ----------- ----------- ----------- 
    2006-01-01 00:00:00.000                                1           11010012    11010012    10          0           50
    2006-01-21 00:00:00.000                                2           11010012    11010012    0           30          20
    2006-01-21 00:00:00.000                                3           11010012    11010012    10          0           30(所影响的行数为 3 行)*/
    drop table tadrop proc proc_test