比如:
temp1 表ks    dw     km
01    1001   1201
01    1001   1202
02    1001   1201现在要取出 ks,dw,km字段但是要保证dw km唯一性
也就是取出
01    1001   1201
01    1001   1202
或者
01    1001   1202
02    1001   1201ks字段取01或02都可以,不做要求。我用下面这句取出来却是
select b.ks,a.dw,a.km from 
(select dw,km from temp1 group by dw,km) a left join
(select ks,dw,km  from temp1 group by ks,dw,km) b
 on a.dw=b.dw and a.km=b.km ks         dw         km         
---------- ---------- ---------- 
01         1001       1201
02         1001       1201
01         1001       1202

解决方案 »

  1.   

    select ks,dw,km from (select t.*,row_number() over(partition by dw,km order by 1) rn from temp1 t ) where rn = 1
      

  2.   

    思路有点问题。对于一个dw,km组合可能会有很多的的ks选择。难道遇到这个情况的时候不选择吗?
      

  3.   

    如果非得那样也是可以的。
       select a.dw,a.km,(select ks from temp1 where dw=a.dw and km=a.km)
        from (select distinct dw,km from temp1) a
      

  4.   

    duanzilin(寻)的答案的正确的,楼主可以试下
      

  5.   

    duanzilin(寻),看不懂,能不能讲解一下,3Q
      

  6.   

    select dw,km,max(ks) from temp1 group by dw,km
      

  7.   

    select ks,max(dw),max(km) from temp1 group by ks
      

  8.   

    select * from temp1 t1 where t1.rowid in (
    select max(rowid) from temp1 t2 where t1.dw=t2.dw and t1.km=t2.km)