本帖最后由 aerfusi 于 2009-10-15 17:07:46 编辑

解决方案 »

  1.   

    select 设备id,进价,min(入库前库存数)入库前库存总数,
      sum(入库数)入库总数,
      max(入库后库存数)入库后库存总数
    where 入库时间>=to_date('20091001','yyyymmdd')
      and 入库时间<to_date('20091101','yyyymmdd')
    group by 设备id,进价
      

  2.   

    select 设备id,进价,min(入库前库存数)入库前库存总数, 
      sum(入库数)入库总数, 
      max(入库后库存数)入库后库存总数 
    from tablename
    where 入库时间>=to_date('20091001','yyyymmdd') 
      and 入库时间 <to_date('20091101','yyyymmdd') 
    group by 设备id,进价
      

  3.   

    如果按你的示例入库总数用MIN,入库总数用SUM,入库后库存总数用MAX就行了
      

  4.   

    对了,忘了说,还存在这样一种情况:设备ID      进价      入库日期      入库前库存数    入库数      入库后库存数 
      C        30.00    2009-9-28        5           1            6在“2009年10月的统计数量”的结果里需要体现 C即:         
    设备ID      进价      入库前库存总数    入库总数      入库后库存总数 
      C        30.00          6            0              6
      

  5.   

    select 设备id,进价,min(入库前库存数)入库前库存总数, 
      sum(入库数)入库总数, 
      max(入库后库存数)入库后库存总数 
    from tt 
    where 入库日期>=to_date('20091001','yyyymmdd') 
      and 入库日期 <to_date('20091101','yyyymmdd') 
    group by 设备id,进价
    union all select 设备id,进价,入库后库存数,0,入库后库存数 from tt t1
      where 入库日期<to_date('20091001','yyyymmdd') 
      and not exists(select 1 from tt where (入库日期<to_date('20091001','yyyymmdd') 
        and 入库日期>t1.入库日期  or 入库日期>=to_date('20091001','yyyymmdd') and 入库日期 <to_date('20091101','yyyymmdd'))
         and 设备id=t1.设备id)
      

  6.   

    对进价有要求的话
    and 设备id=t1.设备id 后面再加个 and 进价=t1.进价
      

  7.   

    select 设备id,进价,min(入库前库存数)入库前库存总数, 
      sum(入库数)入库总数, 
      max(入库后库存数)入库后库存总数 
    from tt 
    where 入库日期>=to_date('20091001','yyyymmdd') 
      and 入库日期 <to_date('20091101','yyyymmdd') 
    group by 设备id,进价
    union all select 设备id,进价,入库后库存数,0,入库后库存数 from tt t1
      where 入库日期<to_date('20091001','yyyymmdd') 
      and not exists(select 1 from tt where (入库日期<to_date('20091001','yyyymmdd') 
        and 入库日期>t1.入库日期  or 入库日期>=to_date('20091001','yyyymmdd') and 入库日期 <to_date('20091101','yyyymmdd'))
         and 设备id=t1.设备id)
      

  8.   

    狂浪兄,union all后面的sql貌似不符合C的情况设备ID      进价      入库日期      入库前库存数    入库数      入库后库存数 
      C        30.00    2009-9-28        5          1            6 
      C        30.00    2009-9-27        3          2            5
      C        40.00    2009-9-26        0          3            3在“2009年10月的统计数量”的结果里需要体现 C 即:        
    设备ID      进价      入库前库存总数    入库总数      入库后库存总数 
      C        30.00          6            0              6 
      C        40.00          3            0              3
      

  9.   

    有体现c吧,只是7楼的代码不会体现进价会40的那条记录,你按8楼说的加个条件试试
    union all后面的代码就是为了找出像你例子中c的这样的记录
      

  10.   

    哦,狂狼兄,你的Sql语句应该是正确的
    union all 后面的sql 我不大明白,能不能解释一下,谢谢了
      

  11.   

    按你的要求,分两种情况,分别在union all前后的代码中体现
    前面的代码是10月份的统计,这个应该没有问题
    后面的代码是找出:10月份中没有对应记录的,在10月份以前找最后一条符合条件的记录,取出来像你的例子中c那样体现。
    where 入库日期<to_date('20091001','yyyymmdd') 
        and 入库日期>t1.入库日期  --在10月以前且时间大于取出的记录
    or 入库日期>=to_date('20091001','yyyymmdd') and 入库日期 <to_date('20091101','yyyymmdd') --在10月之间找出符合2种情况的记录都不存在的记录