求存储过程,或者SQL语句。谢谢大家!
单据日期,单据类型,库房名称,货品名称,重量djrq djlx kfmc hpmc zl
2010-03-20 初始库存 半成品 玉米 11
2010-03-20 初始库存 半成品 豆粕 22
2010-03-20 初始库存 半成品 鱼粉 33
2010-03-21 初始库存 原料 玉米 1
2010-03-21 初始库存 原料 豆粕 2
2010-03-22 原种入库 半成品 玉米 11
2010-03-22 原种入库 半成品 豆粕 22
2010-03-22 种子入库 半成品 猪预混料 6
2010-03-22 种子入库 半成品 蛋禽预混料 4
2010-03-22 种子出库 半成品 玉米 -1
2010-03-22 种子出库 半成品 种禽预混料 -2
2010-03-22 丸化后出库 半成品 鱼粉 -2
2010-03-25 初始库存 预混料 猪预混料 1
2010-03-25 原种入库 预混料 猪预混料 2
2010-03-25 原种入库 半成品 猪预混料 2
2010-03-26 丸化后入库 原料 玉米 1
2010-03-26 原种入库 销售仓库 玉米 11
2010-03-26 原种出库 销售仓库 豆粕 -2

求:某个时间段内变化情况,需要报表如下:‘2010-03-20’——‘2010-03-26’库房名称 起始时间    入库   出库  结余数量
---------------------------------------------------------
半成品 2010-03-20   sum(?)  sum(?)   sum(zl)
原料 2010-03-20   sum(?)  sum(?)   sum(zl)
预混料   2010-03-20   sum(?)  sum(?)   sum(zl)
销售仓库 2010-03-20   sum(?)  sum(?)   sum(zl)
...
 
合计     ?    ?
解释:入库,出库都是求时间段开始时间至结束时间的和。结余是求截止时间的结余。例如上面就是求2010-03-26的结余。

解决方案 »

  1.   

    分组求和 group by with rollup
      

  2.   

    select sum(统计的列) from 表 where 时间列 Between '2007-12-12' and '2009-12-12';
      

  3.   


       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  4.   

    CREATE TABLE [kc1] (
        [djrq] [smalldatetime] NULL ,
        [djlx] [nvarchar] (20),
        [kfmc] [nvarchar] (50),
        [hpmc] [nvarchar] (50),
        [zl] [float] NULL 
    )
    GOinsert into kc1 select '2010-03-20','初始库存','半成品','玉米','11'  
    insert into kc1 select '2010-03-20','初始库存','半成品','豆粕','22'  
    insert into kc1 select '2010-03-20','初始库存','半成品','鱼粉','33'  
    insert into kc1 select '2010-03-21','初始库存','原料','玉米','1'  
    insert into kc1 select '2010-03-21','初始库存','原料','豆粕','2' 
    insert into kc1 select '2010-03-22','原种入库','半成品','玉米','11' 
    insert into kc1 select '2010-03-22','原种入库','半成品','豆粕','22' 
    insert into kc1 select '2010-03-22','种子入库','半成品','猪预混料','6' 
    insert into kc1 select '2010-03-25','原种入库','预混料','猪预混料','2' 
    insert into kc1 select '2010-03-26','原种出库','半成品','豆粕','-6' 
    insert into kc1 select '2010-03-26','原种入库','销售仓库','玉米','11' 
    insert into kc1 select '2010-03-26','种子出库','半成品','猪预混料','-1' 
    insert into kc1 select '2010-03-26','原种入库','原料','豆粕','5' 
    insert into kc1 select '2010-03-26','原种出库','原料','豆粕','-1' select [kfmc],min([djrq]),
           sum(case when djlx like '%入库%' then zl else 0 end) '入库',
           sum(case when djlx like '%出库%' then zl else 0 end) '出库',
           sum(zl) zl
    from kc1 
    where [djrq] between '2010-03-20' and '2010-03-26'
    group by [kfmc]
    kfmc                                                                       入库                     出库                     zl
    -------------------------------------------------- ----------------------- ---------------------- ---------------------- ----------------------
    半成品                                                2010-03-20 00:00:00     39                     -7                     98
    销售仓库                                               2010-03-26 00:00:00     11                     0                      11
    预混料                                                2010-03-25 00:00:00     2                      0                      2
    原料                                                 2010-03-21 00:00:00     5                      -1                     7(4 行受影响)
      

  5.   

    CREATE TABLE [kc1] (
        [djrq] [smalldatetime] NULL ,
        [djlx] [nvarchar] (20),
        [kfmc] [nvarchar] (50),
        [hpmc] [nvarchar] (50),
        [zl] [float] NULL 
    )
    GOinsert into kc1 select '2010-03-20','初始库存','半成品','玉米','11'  
    insert into kc1 select '2010-03-20','初始库存','半成品','豆粕','22'  
    insert into kc1 select '2010-03-20','初始库存','半成品','鱼粉','33'  
    insert into kc1 select '2010-03-21','初始库存','原料','玉米','1'  
    insert into kc1 select '2010-03-21','初始库存','原料','豆粕','2' 
    insert into kc1 select '2010-03-22','原种入库','半成品','玉米','11' 
    insert into kc1 select '2010-03-22','原种入库','半成品','豆粕','22' 
    insert into kc1 select '2010-03-22','种子入库','半成品','猪预混料','6' 
    insert into kc1 select '2010-03-25','原种入库','预混料','猪预混料','2' 
    insert into kc1 select '2010-03-26','原种出库','半成品','豆粕','-6' 
    insert into kc1 select '2010-03-26','原种入库','销售仓库','玉米','11' 
    insert into kc1 select '2010-03-26','种子出库','半成品','猪预混料','-1' 
    insert into kc1 select '2010-03-26','原种入库','原料','豆粕','5' 
    insert into kc1 select '2010-03-26','原种出库','原料','豆粕','-1' select [kfmc],min([djrq]),
           sum(case when djlx like '%入库%' then zl else 0 end) '入库',
           sum(case when djlx like '%出库%' then zl else 0 end) '出库',
           sum(zl) zl
    from kc1 
    where [djrq] between '2010-03-20' and '2010-03-26'
    group by [kfmc]
    kfmc                                                                       入库                     出库                     zl
    -------------------------------------------------- ----------------------- ---------------------- ---------------------- ----------------------
    半成品                                                2010-03-20 00:00:00     39                     -7                     98
    销售仓库                                               2010-03-26 00:00:00     11                     0                      11
    预混料                                                2010-03-25 00:00:00     2                      0                      2
    原料                                                 2010-03-21 00:00:00     5                      -1                     7(4 行受影响)
      

  6.   

    谢谢,看来昨天格式没有弄好,问的问题不明确。准备结贴追加一个问题,如果最后一行再加总和,应该用group by with rollup了吧。
    要得到这样的报表: 
    库房名称    起始时间       入库      出库     结余数量
    kfmc       djrq           zl        zl        zl
    半成品     2010-03-20     39        -7        98      
    销售仓库   2010-03-20     11        0         11
    预混料     2010-03-20     2         0         2
    原 料     2010-03-20      5         -1        7
    合计:                      57        -8         118
    */ 
      

  7.   

    可以了。
    加这个就可以了
    group by [kfmc]  WITH ROLLUP
      

  8.   

    select isnull([kfmc],'总计') [kfmc],min([djrq]),
           sum(case when djlx like '%入库%' then zl else 0 end) '入库',
           sum(case when djlx like '%出库%' then zl else 0 end) '出库',
           sum(zl) zl
    from kc1 
    where [djrq] between '2010-03-20' and '2010-03-26'
    group by [kfmc]
    with rollup kfmc                                                                       入库                     出库                     zl
    -------------------------------------------------- ----------------------- ---------------------- ---------------------- ----------------------
    半成品                                                2010-03-20 00:00:00     39                     -7                     98
    销售仓库                                               2010-03-26 00:00:00     11                     0                      11
    预混料                                                2010-03-25 00:00:00     2                      0                      2
    原料                                                 2010-03-21 00:00:00     5                      -1                     7
    总计                                                 2010-03-20 00:00:00     57                     -8                     118(5 行受影响)