排序 量 现有库存 计算后库存量(这一列怎么计算出来?)
1 -5 185 180 由于现有库存是185,量是-5,所以计算后库存量为185+(-5)=180
2 -10 185 170 上一行的计算后库存量为180,当前行的量为-10,这一行的计算后库存量为170
3 15 185 185 上一行的计算后库存量为170,当前行的量为15,这一行的计算后库存量为185
4 160 185 345 以下所有行,都是这个规律一直向下推
5 -15 185 330
6 -5 185 325
7 30 185 355
8 -50 185 305
9 -25 185 280
谢谢。。

解决方案 »

  1.   


    /*---------------------------------
    --  Author : htl258(Tony)
    --  Date   : 2009-09-21 11:01:21
    --  Version: Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86) 
    Mar 29 2009 10:27:29 
    Copyright (c) 1988-2008 Microsoft Corporation
    Enterprise Evaluation Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)---------------------------------*/
    --> 生成测试数据表:tbIF NOT OBJECT_ID('[tb]') IS NULL
    DROP TABLE [tb]
    GO
    CREATE TABLE [tb]([排序] INT,[量] INT,[现有库存] INT,[计算后] INT)
    INSERT [tb]
    SELECT 1,-5,185,180 UNION ALL
    SELECT 2,-10,185,170 UNION ALL
    SELECT 3,15,185,185 UNION ALL
    SELECT 4,160,185,345 UNION ALL
    SELECT 5,-15,185,330 UNION ALL
    SELECT 6,-5,185,325 UNION ALL
    SELECT 7,30,185,355 UNION ALL
    SELECT 8,-50,185,305 UNION ALL
    SELECT 9,-25,185,280
    GO
    --SELECT * FROM [tb]-->SQL查询如下:
    SELECT *,
    计算后的库存=(SELECT SUM([量]) FROM tb WHERE 排序<=t.排序)+现有库存
    FROM tb t
    /*
    排序          量           现有库存        计算后         计算后的库存
    ----------- ----------- ----------- ----------- -----------
    1           -5          185         180         180
    2           -10         185         170         170
    3           15          185         185         185
    4           160         185         345         345
    5           -15         185         330         330
    6           -5          185         325         325
    7           30          185         355         355
    8           -50         185         305         305
    9           -25         185         280         280(9 行受影响)
    */
      

  2.   

    --> 测试数据:@tb
    declare @tb table([a] int,[b] int,[c] int,[d] int)
    insert @tb
    select 1,-5,185,180 union all
    select 2,-10,185,170 union all
    select 3,15,185,185 union all
    select 4,160,185,345 union all
    select 5,-15,185,330 union all
    select 6,-5,185,325 union all
    select 7,30,185,355 union all
    select 8,-50,185,305 union all
    select 9,-25,185,280select * ,计算后库存量=c+(select sum(b) from @tb where a<=t.a)from @tb t
      

  3.   

    CREATE TABLE [tb]([排序] INT,[量] INT,[现有库存] INT)
    INSERT [tb]
    SELECT 1,-5,185 UNION ALL
    SELECT 2,-10,185 UNION ALL
    SELECT 3,15,185 UNION ALL
    SELECT 4,160,185 UNION ALL
    SELECT 5,-15,185 UNION ALL
    SELECT 6,-5,185 UNION ALL
    SELECT 7,30,185 UNION ALL
    SELECT 8,-50,185 UNION ALL
    SELECT 9,-25,185
    GOselect *,计算后= (select top 1 现有库存 from tb order by 排序) + (select sum(量) from tb where 排序 <= t.排序) from tb tdrop table tb/*
    排序          量           现有库存        计算后         
    ----------- ----------- ----------- ----------- 
    1           -5          185         180
    2           -10         185         170
    3           15          185         185
    4           160         185         345
    5           -15         185         330
    6           -5          185         325
    7           30          185         355
    8           -50         185         305
    9           -25         185         280(所影响的行数为 9 行)*/
      

  4.   

    这有什么用?这是死的
    楼主应当用幂指数来写sql就行了。
      

  5.   

    会计期间        借方发生金额    贷方发生金额  科目余额方向  科目余额    
    -----------  -----------   -----------  ----------- -----------
    200901           5          15            1          180
    200902           10         25            1         ?
    200903           15         45            1         ?
    200904           160        35            1         ?
    200905           15         10            1         ?
    200906           85          20           1         ?
    200907           30         15            1         ?
    200908           50         85            1         ?
    200909           25         5             1         ?--------------------------------
    说明:科目余额方向:(1:借; -1 为贷);
    if(科目余额方向 > 0){
      当前期间科目余额= 前一期间科目余额 + 借方发生金额 - 贷方发生金额;
    } else {
      当前期间科目余额= 前一期间科目余额 + 贷方发生金额 - 借方发生金额 ;
    }只有第一期间有科目余额值,现在要把每期间的余额根据每期的发生金额,计算出来,并update到表里,请问怎么写?