有两个表:A,B;
A:
 F1   F2   F3   F4
 1   TOM    A1    
 2    MIKE  B1  
 3   JIM    C1
 4   JENY   D2
B:
 F1   F2    F3
  1   A
  1   B
  1   C
  1   D
  2   A
  2   B
  2   C
  2   D
  3   A
  3   B
  3   C
  3   D
  4   A
  4   B
  4   C
怎么能通过SQL语句查询出:
  1~3   A,B,C,D
  4     A,B,C
  

解决方案 »

  1.   

    和a表没有关系
    f2列的字符是否固定是a,b,c,d,如果不固定,其组合种类会有很多,需要对每个组合作统计,做起来会很复杂。
      

  2.   

    我觉得需要建一个函数帮忙:
    create or replace function get_String(
    p_f1  in number
    )
    return varchar2
    as
     cursor ccc(v_f1 number) is select f2 from b where f1=v_f1 order by f2 asc;
     uuu ccc%rowtype;
     str2 varchar2(200);
    begin
    open ccc(p_f1);
       loop
         fetch ccc into uuu;
         exit when ccc%notfound;
         str2:=str2 || uuu.f2; 
       end loop;
    return str2;
    end;select case when min(f1)<max(f1) then min(f1) || '-' || max(f1) else to_char(max(f1)) end f1,f2 
      from 
          (
             select distinct f1,get_String(f1) f2 from b
              ) 
                 group by f2,rownum-f1 
                   
      

  3.   

    select case when min(f1)<max(f1) then min(f1) || '-' || max(f1) else to_char(max(f1)) end f1,f2 
      from 
          (
             select distinct f1,get_String(f1) f2 from b order by f2
              ) 
                 group by f2,rownum-f1
      

  4.   

    select f2,decode(min(f1),max(f1),to_char(max(f1)),min(f1) || '-' || max(f1)) as ddd
      from 
          (
             select distinct f1,get_String(f1) f2 from b order by f2
              ) 
                 group by f2,rownum-f1 order by max(f1)