现在表1:
A      B     C
1      1     SAD
1      2     DSF
1      3     SAF
1      4     SDF
2      1     SAD
2      2     DSF
2      3     SAF
2      4     SDF
怎么能实现A属性重复时不显示A属性,如表2
A      B     C
1      1     SAD
       2     DSF
       3     SAF
       4     SDF
2      1     SAD
       2     DSF
       3     SAF
       4     SDF
请问各位大哥,这个用存储过程怎么实现?

解决方案 »

  1.   

    create table tb(A varchar2(1),     B varchar2(1) ,   C varchar2(10)) 
    insert into tb values('1' ,     '1' ,   'SAD') 
    insert into tb values('1' ,     '2' ,   'DSF')
    insert into tb values('1' ,     '3' ,   'SAF') 
    insert into tb values('1' ,     '4' ,   'SDF') 
    insert into tb values('2' ,     '1' ,   'SAD') 
    insert into tb values('2' ,     '2' ,   'DSF') 
    insert into tb values('2' ,     '3' ,   'SAF') 
    insert into tb values('2' ,     '4' ,   'SDF') 
    goselect case when b = (select min(b) from tb where A = t.A) then A else '' end A , B , C from tb tdrop table tb/*
    A B C         
    - - ----------
    1 1 SAD       
      2 DSF       
      3 SAF       
      4 SDF       
    2 1 SAD       
      2 DSF       
      3 SAF       
      4 SDF       8 rows selected.
    */
      

  2.   

    select decode(rn, 1, A, null), B, C
      FROM (select t.*, row_number() over(partition by A order by rownum) rn
              from test t)
      

  3.   

    那就如2楼用row_number生成一个行号,然后用最小的行号.
      

  4.   

    麻烦一下二楼,能把DECODE里面的意思解释一下吗?
      

  5.   

    create table tb(A varchar2(1),     B varchar2(1) ,   C varchar2(10)) 
    insert into tb values('1' ,     '1' ,   'SAD') 
    insert into tb values('1' ,     '2' ,   'DSF')
    insert into tb values('1' ,     '3' ,   'SAF') 
    insert into tb values('1' ,     '4' ,   'SDF') 
    insert into tb values('2' ,     '1' ,   'SAD') 
    insert into tb values('2' ,     '2' ,   'DSF') 
    insert into tb values('2' ,     '3' ,   'SAF') 
    insert into tb values('2' ,     '4' ,   'SDF') 
    goselect case when b = (select min(b) from tb where A = t.A) then A else '' end A , B , C from tb tselect decode(rn, 1, A, null) A, B, C FROM (select t.*, row_number() over(partition by A order by rownum) rn from tb t)drop table tb/*
    A B C         
    - - ----------
    1 1 SAD       
      2 DSF       
      3 SAF       
      4 SDF       
    2 1 SAD       
      2 DSF       
      3 SAF       
      4 SDF       8 rows selected.
    */