有这个贴子表的两个字段F1,F2,其值如下 
F1  F2 
01  a 
01  aa 
02  b 
02  bb 
02  bbb 
现在想用SQL语句让上面的记录显示为 
01  a 
    aa 
02  b 
    bb 
    bbb 
我想说的是 表的两个字段F1,F2,其值如下 
F1  F2 
01  a 
01  a
02  b 
02  b
02  bbb 
现在想用SQL语句让上面的记录显示为 下面的方式。
01  a 
    a 
02  b 
    b 
    bbb 

解决方案 »

  1.   

    有两个一样的就麻烦.
    01  a 
    01  a 
    02  b 
    02  b 
      

  2.   

    SQL 2005 可能简单点,如果2000版本,由于有完全相同的纪录,需要用临时表增加唯一字段才能保证万无一失
      

  3.   

    --第一个
    create table tb(F1 varchar(10) , F2 varchar(10))
    insert into tb values('01' , 'a') 
    insert into tb values('01' , 'aa') 
    insert into tb values('02' , 'b') 
    insert into tb values('02' , 'bb') 
    insert into tb values('02' , 'bbb') 
    goselect case when F2=(select min(F2) from tb where F1=a.F1) then f1 else '' end as f1 , f2
    from tb a
    order by f2drop table tb/*
    f1         f2         
    ---------- ---------- 
    01         a
               aa
    02         b
               bb
               bbb(所影响的行数为 5 行)
    */
      

  4.   

    --第二个,由于存在相同的记录,在2000里面只能使用临时表来完成,在2005里面可以使用row_number来解决.create table tb(F1 varchar(10) , F2 varchar(10))
    insert into tb values('01' , 'a') 
    insert into tb values('01' , 'a') 
    insert into tb values('02' , 'b') 
    insert into tb values('02' , 'b') 
    insert into tb values('02' , 'bbb') 
    go
    select * , id = identity(int,1,1) into tmp from tbselect case when id=(select min(id) from tmp where F1=a.F1) then f1 else '' end as f1 , f2
    from tmp a
    order by f2drop table tb,tmp/*
    f1         f2         
    ---------- ---------- 
    01         a
               a
    02         b
               b
               bbb(所影响的行数为 5 行)
    */
      

  5.   

    把我写的那两个的排序去掉.
    就是order by 这些内容不要.
      

  6.   

    第二个可以考虑如下不用加字段,但是必须保证倒入表变量的纪录是排好序的:declare @t table(
    F1  varchar(10),
    F2 varchar(10)
    )insert @t select
    '01',  'a' 
    union all select
    '01',  'a' 
    union all select
    '02',  'b' 
    union all select
    '02',  'b' 
    union all select
    '02',  'bbb' declare @F1 varchar(10)
    declare @F11 varchar(10)
    update @t set
        @F1=case when @F11=F1 then '' else F1 end,
        @F11=F1,
        F1=@F1select * from @t--结果
    F1         F2         
    ---------- ---------- 
    01         a
               a
    02         b
               b
               bbb(所影响的行数为 5 行)