有一表,corp_info
有字段,corp_id,corp_name,但由于误输入等造成相同的corp_id,却有不同的corp_name,
我想取出corp_id和相同corp_id的corp_name中corp_name最长的一个出来,
这个sql要怎么写?

解决方案 »

  1.   

    select
    *
    from 
    (
    select a.*,row_number() over(partition by a.corp_id order by length(a.corp_name)) rn
    from corp_info a) b
    where b.rn>1其实以后,你这个表以CORP_ID做个主键,就不会产生这个情况了 
      

  2.   

    支持楼上
    不过楼主只要取出一个最长的,如果重复数量超过2个,上面的语句会有点问题
    order by length(a.corp_name)后面加个desc
    rn>1改成rn=1
      

  3.   

    SELECT corp_id, corp_name FROM 
      (SELECT corp_id, corp_name, RANK() OVER(PARTITION BY corp_id ORDER BY LENGTH(corp_name) DESC) rn
         FROM corp_info)
     WHERE rn = 1;
      

  4.   

    SELECT corp_id,corp_name FROM (
    SELECT corp_id,corp_name,ROW_NUMBER() OVER(PARTITION BY corp_id ORDER BY LENGTH(corp_name) DESC) rn FROM corp_info
    ) WHERE rn = 1;
      

  5.   

    select b.corp_id,b.corp_name ,length(b.corp_name ) from corp_info b,(select distinct(t.corp_id) id,max(length(t.corp_name )) num from corp_info t
    group by t.corp_id) a
    where b.corp_id=a.id
    and length(b.corp_name ) = a.num