表 如下
产品        投产月份     投产次数     投产数量
COL1         COL2          COL3          COL4
 A          2009-06         1            10
 A          2009-06         2            10
 A          2009-07         3            10
 B          2009-06         1            10
 B          2009-07         2            10
 C          2009-07         1            10
 A          2009-06         4            10第一个:查询语句实现如下结果:
想按月份把产品种类给标识出来,查询结果如下产品        投产月份     投产次数     投产数量      种类
COL1         COL2          COL3          COL4        COL5
 A          2009-06         1            10            1
 A          2009-06         2            10            0     (2009年6月A产品已投产,不计入种类)
 A          2009-06         3            10            0     (2009年6月A产品已投产,不计入种类)
 A          2009-07         4            10            1
 B          2009-06         1            10            1
 B          2009-07         2            10            1
 C          2009-07         1            10            1第二个:按月份汇总查询, 投产月份      投产数量      种类
  COL2           COL4        COL5
 2009-06          40           2
 2009-07          30           3其实第二个就是第一个的汇总,但是如果能直接从表中查询出来效率更高的话,最好能直接查询出来.请教高手!

解决方案 »

  1.   

    lz
    是不是写的有问题,还是我理解错了,感觉说的不是很清楚。看表:A产品的数据
    产品        投产月份    投产次数    投产数量 
    COL1        COL2          COL3          COL4 
    A          2009-06        1            10 
    A          2009-06        2            10 
    A          2009-06        4            10 
    A          2009-07        3            10 然后你查出来的
    COL1        COL2          COL3          COL4        COL5 
    A          2009-06        1            10            1 
    A          2009-06        2            10            0 (2009年6月A产品已投产,不计入类) 
    A          2009-06        3            10            0 (2009年6月A产品已投产,不计入类) 
    A          2009-07        4            10            1 
    觉得奇怪~~~~
      

  2.   

    1.
    select col1,col2,col3,col4, 
      case when row_number()over(partition by col1,col2 order by col3)=1 then 1 else 0 end col5
    from a2.
    select col2,sum(col4),count(distinct col1)
    from a
    group by col2
      

  3.   

    1. 
    select col1,col2,col3,col4, 
      case when min(col3) over(partition by col1,col2)=col3 then 0 else 1 end col5 
    from a 这样也应该可以吧,楼主试试
      

  4.   

    1. 
    select col1,col2,col3,col4, 
      case when min(col3) over(partition by col1,col2)=col3 then 1 else 0 end col5 
    from a不好意思,写错了