表结构:表history三个字段part,date,qty。表part_mst 也是三个字段:part,name,on_hand
表part_mst的on_hand的字段是指现在(也就是今天的在库数量),表history的qty字段是指:进货多少或者出货多少,如果是进货就用正数的表示,如果是出货就用负数表示。表history的date字段是指是:进货或出货的日期。
   画面是一个可以输入开始时间和结束时间的edit。比如我现在输入2008-02-11到2008-03-15;
现在我向得到的是:2008-02-11以前的在库数量(on_hand 减去2008-02-11到今天的变化量),和2008-03-15那个时候的在库数量(on_hand 减去2008-02-15到今天的变化量)。还有在2008-02-11到2008-03-15时间段的增加量和减少量。
请用sql文帮我表达出来。谢谢!!!!!

解决方案 »

  1.   

    2008-02-11 在库数量select part,sum(qty)
    from (
    select part,-qty
    from history
    where date>'2008-02-11'
    union all
    select part,on_hand
    from part_mst)
    group by part
    == 思想重于技巧 ==
      

  2.   

    在2008-02-11到2008-03-15时间段的增加量和减少量 select part,sum(if(qty>0,qty,0)) as GR ,sum(if(qty<0,qty,0)) as GI
    from history
    where date between '2008-02-11' and '2008-03-15'
    group by part
    == 思想重于技巧 ==
      

  3.   

    要在一个sql文里实现了
    像下面这样对吗?
    select  history.part as part1,
    history.on_hand, 
    sum(iff(history.qty  0,history.qty,0)) as qty1, 
            sum(iff(history.qty < 0,-history.qty,0)) as qty2, 
            (select sum(qty) 
            from history 
            where history.part = part_mstpart
              and date between(2008/03/08,2008/03/25)) as total, 
            history.on_hand - total as on_hand1, 
            on_hand1 - 1 - 1 as last_on_hand 
    from    history left join part_mst on history.part = part_mst.part
    where   historyb.date between(2008/01/03,2008/03/08) 
    group by a.part 
             history.name
             history.on_hand 
    order by a.part
      

  4.   

    select a.part,a.sqty1,b.sqty2,c.GR,c.GI
    from (
    select part,sum(qty) as sqty1
    from (
    select part,-qty
    from history
    where date>'2008-02-11'
    union all
    select part,on_hand
    from part_mst)
    group by part
    ) a,
    (
    select part,sum(qty) as sqty2
    from (
    select part,-qty
    from history
    where date>'2008-03-15'
    union all
    select part,on_hand
    from part_mst)
    group by part
    ) b,
    (
    select part,sum(if(qty>0,qty,0)) as GR ,sum(if(qty<0,qty,0)) as GI
    from history
    where date between '2008-02-11' and '2008-03-15'
    group by part
    ) c
    where a.part = b.part and a.part=c.part
    == 思想重于技巧 ==