日期           类别 名称 单位 入库 调拔入 出库出 调拔出 报损
2007-11-8 机具设备 电钻 台 1525 1 11100 100 100
2007-11-9 机具设备 角磨机 台 2456 1 1200 0 200
2007-11-10 机具设备 角磨机 台 35 1 125 0 30
这是一个从进销存里查出来的视图文件,现在还有一张报表要弄成这个样子的:
类别  名称  至本期结存数  本期入 本月出 本期结存其中 "至本期结存数" 就是本期以前所有的入库-出库,而本期的定义则是任意一个时间段,比如可能是从今天到以前的一个星期或一个月,因此不能使用结帐的方式,必须用查询灵活的定义本期时间来查询

解决方案 »

  1.   

    create proc p_my @fromdate datetime, @todate datetime
    as
    select * into # from listab where listdate between @frountdate and @todate
    select type, (a+b) totalru, (c+d) totalchu, (a+b-c-d) jieyu from 
    (select type, sum(ruku) a,sum(boru) b,sum(chuku) c,sum(bochu) d from # group by type) T1
    ...
    goexec p_my '2007-11-01','2007-12-01'
      

  2.   


    IF object_id('进销存','U') IS NOT NULL 
      DROP TABLE 进销存SELECT '2007-11-8' 日期,'机具设备' 类别,'电钻' 名称,'台' 单位,
           1525 入库,1 调拔入,1100 出库出,100 调拔出,100 报损
    INTO   进销存
    UNION ALL
    SELECT '2007-11-9','机具设备','角磨机','台',2456,1,1200,0,200
    UNION ALL
    SELECT '2007-11-10','机具设备','电钻','台',35,1,125,0,30
    UNION ALL
    SELECT '2008-11-9','机具设备','电钻','台',2456,1,1200,0,200
    UNION ALL
    SELECT '2008-11-10','机具设备','角磨机','台',35,1,125,0,30
    UNION ALL
    SELECT '2009-11-9','机具设备','电钻','台',2456,1,1200,0,200
    UNION ALL
    SELECT '2009-11-10','机具设备','角磨机','台',35,1,125,0,30
    UNION ALL
    SELECT '2009-12-9','机具设备','电钻','台',2456,1,1200,0,200
    UNION ALL
    SELECT '2009-12-10','机具设备','电钻','台',35,1,125,0,30alter table 进销存 alter column 日期 smalldatetimeSELECT *
    FROM   进销存SELECT *
    FROM   进销存
    WHERE  日期 BETWEEN '2007-11-10' AND '2009-12-9'SELECT   类别,
             名称,
             至本期结存数 = isnull((SELECT   SUM(入库 + 调拔入 - 出库出 - 调拔出 - 报损)
                                    FROM     进销存
                                    WHERE    日期 < '2007-11-10'
                                             AND 类别 = a.类别
                                             AND 名称 = a.名称
                                    GROUP BY 类别,名称),0),
             本期入 = SUM(入库 + 调拔入),
             本期出 = SUM(出库出 + 调拔出),
             本期结存 = SUM(入库 + 调拔入 - 出库出 - 调拔出 - 报损) 
                          + isnull((SELECT   SUM(入库 + 调拔入 - 出库出 - 调拔出 - 报损)
                                    FROM     进销存
                                    WHERE    日期 < '2007-11-10'
                                             AND 类别 = a.类别
                                             AND 名称 = a.名称
                                    GROUP BY 类别,名称),0)
    FROM     进销存 a
    WHERE    日期 BETWEEN '2007-11-10' AND '2009-12-9'
    GROUP BY 类别,名称IF object_id('进销存','U') IS NOT NULL 
      DROP TABLE 进销存
    /*
    结果:(9 行受影响)
    日期                      类别       名称     单位   入库          调拔入         出库出         调拔出         报损
    ----------------------- -------- ------ ---- ----------- ----------- ----------- ----------- -----------
    2007-11-08 00:00:00     机具设备     电钻     台    1525        1           1100        100         100
    2007-11-09 00:00:00     机具设备     角磨机    台    2456        1           1200        0           200
    2007-11-10 00:00:00     机具设备     电钻     台    35          1           125         0           30
    2008-11-09 00:00:00     机具设备     电钻     台    2456        1           1200        0           200
    2008-11-10 00:00:00     机具设备     角磨机    台    35          1           125         0           30
    2009-11-09 00:00:00     机具设备     电钻     台    2456        1           1200        0           200
    2009-11-10 00:00:00     机具设备     角磨机    台    35          1           125         0           30
    2009-12-09 00:00:00     机具设备     电钻     台    2456        1           1200        0           200
    2009-12-10 00:00:00     机具设备     电钻     台    35          1           125         0           30(9 行受影响)日期                      类别       名称     单位   入库          调拔入         出库出         调拔出         报损
    ----------------------- -------- ------ ---- ----------- ----------- ----------- ----------- -----------
    2007-11-10 00:00:00     机具设备     电钻     台    35          1           125         0           30
    2008-11-09 00:00:00     机具设备     电钻     台    2456        1           1200        0           200
    2008-11-10 00:00:00     机具设备     角磨机    台    35          1           125         0           30
    2009-11-09 00:00:00     机具设备     电钻     台    2456        1           1200        0           200
    2009-11-10 00:00:00     机具设备     角磨机    台    35          1           125         0           30
    2009-12-09 00:00:00     机具设备     电钻     台    2456        1           1200        0           200(6 行受影响)类别       名称     至本期结存数      本期入         本期出         本期结存
    -------- ------ ----------- ----------- ----------- -----------
    机具设备     电钻     226         7407        3725        3278
    机具设备     角磨机    1057        72          250         819(2 行受影响)
    */