toleeboyan(宝宝) :人家小妹你也小妹,呵呵

解决方案 »

  1.   

    表GS031中应该有字段“编码”。
    如果不分仓库查询:select a.仓库代码,
           a.编码,
           sum(  case when 业务='入库' 
                      then 数量 
                      else (-1)*数量 
                 end
               )-isnull(期初库存,0) as 库存量
    from gs01 a left join gs031 b on a.仓库代码=b.仓库代码 and a.编码=b.编码
    group by a.仓库代码,a.编码,b.期初库存
    分仓查询的话:select a.仓库代码,
           a.编码,
           sum(case when 业务='入库' then 数量 else (-1)*数量 end)-isnull(期初库存,0) as 库存量
    from gs01 a left join 
         (  select * 
            from gs031 
            where 仓库代码=@仓库代码
         ) b on a.仓库代码=b.仓库代码 and a.编码=b.编码
    where a.仓库代码=@仓库代码
    group by a.仓库代码,a.编码,b.期初库存
      

  2.   

    是呀,我也觉得很复杂但是没办法
    给你几个数据
    gs031表:
       仓库代码    编码         期初数量
        001        001000101     300
        002        001000101     400
        001        001000103     3999
        ...
    gs01表
       仓库代码    编码         业务      数量 
       001         001000101     入库      3050
       002         001000101     入库      4050
       001         001000101     出库      3800
       001         001000105     入库      3400
       001         001000101     出库      3050
       001         001000105     入库      3050
       001         001000103     入库      3000
       002         001000103     出库      3050
       ....
    这就是数据,要求就是我刚刚说的那些,求求你们了,谢谢
      

  3.   

    victorycyz(中海)@ 是什么意思了,你那只是分仓查出来,可是我的这种情况不行吧,就是ggs031表中没有gs01中编码的商品
    库存数量=gs031 .期初库存 +   GS01 业务类型='入库' .数量 - GS01 业务类型='2'. 数量 
    如果所查询的代码在gs031中没有,那么期初的数量就为0
    库存数量=GS01 业务类型='入库' .数量 - GS01 业务类型='2'. 数量
      

  4.   

    是不是我把@仓库代码在我的asp文件中里就写成仓库代码='001'这样呢,001是我提交过来的
      

  5.   

    victorycyz(中海)再问你一个问题,你刚刚给我写的那两个句子差不多都实现了,先谢谢你,但有一个问题不对,你写的那个不分仓查询,比如说:
    表gs031里面
      仓库代码    编码         期初数量
        001        001000101     300
        002       001000101      409
    表gs01里面
      仓库代码    编码         业务      数量 
        001         001000101     入库      3050
        001         001000101     入库      4050
    这样查出来的期初数量应该是709对吧,但它只能查出来300,这是怎么回事呢,请帮忙再看一下吧,谢谢啦
      

  6.   

    --不分仓库
    select a.编码,期初数量=isnull(b.期初数量,0),a.本期入库,a.本期出库
    ,期末数量=isnull(b.期初数量,0)+a.本期结余
    from(
    select 编码
    ,本期入库=sum(case 业务 when '入库' then 数量 else 0 end)
    ,本期出库=sum(case 业务 when '出库' then 数量 else 0 end)
    ,本期结余=sum(case 业务 when '入库' then 数量 else -数量 end)
    from gs01
    group by 编码
    )a left join(
    select 编码,期初数量=sum(期初数量)
    from gs031
    group by 编码
    )b on a.编码=b.编码
      

  7.   

    --分仓库
    select a.编码,期初数量=isnull(b.期初数量,0),a.本期入库,a.本期出库
    ,期末数量=isnull(b.期初数量,0)+a.本期结余
    from(
    select 编码,仓库代码
    ,本期入库=sum(case 业务 when '入库' then 数量 else 0 end)
    ,本期出库=sum(case 业务 when '出库' then 数量 else 0 end)
    ,本期结余=sum(case 业务 when '入库' then 数量 else -数量 end)
    from gs01
    group by 编码,仓库代码
    )a left join(
    select 编码,仓库代码,期初数量=sum(期初数量)
    from gs031
    group by 编码,仓库代码
    )b on a.编码=b.编码 and a.仓库代码=b.仓库代码
      

  8.   

    --测试--测试数据
    create table gs031(仓库代码 char(3),编码 char(9),期初数量 int)
    insert gs031 select '001','001000101',300
    union all    select '002','001000101',400
    union all    select '001','001000103',3999create table gs01(仓库代码 char(3),编码 char(10),业务 char(4),数量 int)
    insert gs01 select '001','001000101','入库',3050
    union all   select '002','001000101','入库',4050
    union all   select '001','001000101','出库',3800
    union all   select '001','001000105','入库',3400
    union all   select '001','001000101','出库',3050
    union all   select '001','001000105','入库',3050
    union all   select '001','001000103','入库',3000
    union all   select '002','001000103','出库',3050
    go--不分仓库
    select a.编码,期初数量=isnull(b.期初数量,0),a.本期入库,a.本期出库
    ,期末数量=isnull(b.期初数量,0)+a.本期结余
    from(
    select 编码
    ,本期入库=sum(case 业务 when '入库' then 数量 else 0 end)
    ,本期出库=sum(case 业务 when '出库' then 数量 else 0 end)
    ,本期结余=sum(case 业务 when '入库' then 数量 else -数量 end)
    from gs01
    group by 编码
    )a left join(
    select 编码,期初数量=sum(期初数量)
    from gs031
    group by 编码
    )b on a.编码=b.编码--分仓库
    select a.编码,期初数量=isnull(b.期初数量,0),a.本期入库,a.本期出库
    ,期末数量=isnull(b.期初数量,0)+a.本期结余
    from(
    select 编码,仓库代码
    ,本期入库=sum(case 业务 when '入库' then 数量 else 0 end)
    ,本期出库=sum(case 业务 when '出库' then 数量 else 0 end)
    ,本期结余=sum(case 业务 when '入库' then 数量 else -数量 end)
    from gs01
    group by 编码,仓库代码
    )a left join(
    select 编码,仓库代码,期初数量=sum(期初数量)
    from gs031
    group by 编码,仓库代码
    )b on a.编码=b.编码 and a.仓库代码=b.仓库代码
    go--删除测试
    drop table gs031,gs01/*--测试结果编码         期初数量        本期入库        本期出库        期末数量        
    ---------- ----------- ----------- ----------- ----------- 
    001000101  700         7100        6850        950
    001000103  3999        3000        3050        3949
    001000105  0           6450        0           6450(所影响的行数为 3 行)编码         期初数量        本期入库        本期出库        期末数量        
    ---------- ----------- ----------- ----------- ----------- 
    001000101  300         3050        6850        -3500
    001000101  400         4050        0           4450
    001000103  3999        3000        0           6999
    001000103  0           0           3050        -3050
    001000105  0           6450        0           6450(所影响的行数为 5 行)
    --*/