在oracle下,有这样一张表名称 类别  品种     入库时间
A    新库  1,2,3  2010-01-01
A    新库  1,4      2010-01-02
B    原库  1,2,4   2010-01-02
C    原库  1,3,4   2010-01-03
B    新库  1        2010-01-04
这张表 如何查询才能得到某个时间段内(查询条件)新库入库了几次A部件几次B部件(有几种部件就全部统计直到没有为止)并分组统计 以及分到原库中的零件次数,最后显示如下名称 类别  入库次数
 A   新库  2
 B   新库  1
 C   新库  XX(如果原表中有这个记录的话,查询分组直到新库中没有新零件为止)
 ALL 原库  2(这个是统计原库所有零件入库次数,不用计较到底入库了哪几个零件,就用ALL代表所有,只用一条记录表示总的)

解决方案 »

  1.   

    select 名称,类别,count(*) from 表 where 类别='新库'  group by 名称,类别
    union all
    select 'ALL',类别,count(*) from 表 where 类别='原库'  group by 名称,类别
      

  2.   

    select decode(类别,'原库','ALL',名称) as 名称,类别,count(*) as 入库次数
    from 这样一张表
    group by decode(类别,'原库','ALL',名称),类别
      

  3.   

    --原库不需要group by 了
    select 名称,类别,count(*) "入库次数" from 表 where 类别='新库'  group by 名称,类别 
    union all 
    select 'ALL' "名称",类别,count(*) from 表 where 类别='原库'; 
      

  4.   

    oracle里面支持将返回结果按照某个分隔符拆分这种sql写法吗?
      

  5.   

    你的这个问题可以参考:
    http://blog.csdn.net/huangyunzeng2008/archive/2010/01/11/5172500.aspx