select *,t.price-isnull((select top 1 price from 表 where id<t.id order by id desc),t.price) from 表 t

解决方案 »

  1.   

    DECLARE @t TABLE([id] INT,[bookname] NVARCHAR(12),[price] DECIMAL(18,2),[net] DECIMAL(10,2))
    INSERT @t SELECT 1,N'java100例',25.36,NULL
    UNION ALL SELECT 2,N'net100例',24.86,NULL
    UNION ALL SELECT 3,N'javascript详解',23.12,NULL
    /************/
    /*Test  Data*/
    /***fcuandy**/
    /*2009-02-02*/
    /************/UPDATE a SET net = ISNULL(a.price - b.price,0) 
    FROM @t a
    LEFT JOIN @t b
    ON a.id=b.id+1SELECT * FROM @t
    /*
    1 java100例 25.36 0.00
    2 net100例 24.86 -0.50
    3 javascript详解 23.12 -1.74
    */
      

  2.   

    update t 
    set 
        net = t.price-isnull((select top 1 price from 表 where id<t.id order by id desc),t.price) 
    from 
        表 t
      

  3.   

    还要更新表中的net字段哦,要写成一个存储过程,一遍作业调用呢,这个怎么实现呢?帮帮忙?
      

  4.   

    若不连续
    DECLARE @t TABLE([id] INT,[bookname] NVARCHAR(12),[price] DECIMAL(18,2),[net] DECIMAL(10,2))
    INSERT @t SELECT 1,N'java100例',25.36,NULL
    UNION ALL SELECT 3,N'net100例',24.86,NULL
    UNION ALL SELECT 9,N'javascript详解',23.12,NULL
    /************/
    /*Test  Data*/
    /***fcuandy**/
    /*2009-02-02*/
    /************/UPDATE a SET net = ISNULL(a.price - b.price,0) 
    FROM @t a
    LEFT JOIN @t b
    ON b.id<a.id AND NOT EXISTS(SELECT 1 FROM @t WHERE id < a.id AND id>b.id)SELECT * FROM @t
    /*
    1 java100例 25.36 0.00
    3 net100例 24.86 -0.50
    9 javascript详解 23.12 -1.74
    */
      

  5.   

    这个表中的数据每时每刻都再变化,而且ID 不是连续的,要求数据库自己每隔1分钟就检查一次(我采用作业),如果net值没有被计算的,就要调用存储过程计算,而且第一条数据的net值是0,这个怎么写啊?
      

  6.   

    搞定了,虽然没用到游标,但是也解决了,但是有一个问题呢,你们这个都是一下子就更新所有数据,如果我的数据有几万条,是不是就很慢了?能不能是那中判断类型的呢,就是说如果net为空,我就计算net为空的,已经计算好了的就不用计算了,这个怎么实现?,请教啊?
      

  7.   

    用ROW_Number函数生成连续主键(SQLServer2005)
      

  8.   

    可是我的是sqlserver2000啊,怎么弄啊?