select distinct(activityname) from tb1 where processid = '9567' 取出来了不重复数据但是我有另外一个CNTID(数字型)字段,是控制activityname字段的顺序的,上面这个语句取出来的数据不能按照CNTID从大到小的顺序排序。select distinct(activityname),cnt from tb1 where processid = '9567' order by cnt
这句话能查出来但是activityname字段的值又是所有的值了,怎么才能取出来activityname字段不重复的值并且按CNTID字段的顺序排序?

解决方案 »

  1.   

    一个activityname对应多个CNTID,你要取哪一条?
    不同activityname对应的CNTID是否会一样?
      

  2.   

    对,oracle不知道该怎么给你排序啊!
      

  3.   

    只能做到这样:
    select distinct activityname, cnt from tb1 where processid = '9567' order by cnt 
    结果activityname有可能有重复.
      

  4.   

    不妨这样实现:
    select activityname,cnt
    from(
    select activityname,cnt,row_number()over(partition by activityname order by cnt) num
    from tb1
    processid = '9567'
    ) where num=1;
      

  5.   

    楼主,可以结贴了吧,这个可以实现
    select   max(cnt) cnt,activityname 
           from tb1 
           where processid = '9567'
                 group by activityname 
                 order by cnt 
      

  6.   

    支持了,也可以用min、not exists实现
      

  7.   

    select activityname,cnt,row_number()over(partition by activityname order by cnt) num
    from tb1
    processid = '9567'
     这样就可以 
      

  8.   

    6楼sql易懂,但5楼的分析函数用的也不错,我喜欢5楼答案