create table #a(Fname varchar(30),fqun decimal(18,2),fclass int )
create table #b ( fclass int,name varchar(30))
insert into #a
select 'a',20,1
union all
select 'a',20,2
union all
select 'a',20,3
union all
select 'B',10,1
union all
select 'B',10,2insert into #b
select 1,'A'
union 
select 2,'B'
union 
select 3,'C'select a.*,b.name from #a a inner join #b b on a.fclass = b.fclass
要求输出格式为
Fname                          fqun                 fclass      name                           
------------------------------ -------------------- ----------- ------------------------------ 
a                              20.00                1           A
                                                    2           B
                                                    3           C
B                              10.00                1           A
                                                    2           B

解决方案 »

  1.   


    表的两个字段F1,F2,其值如下 
    F1  F2 
    01  a 
    01  aa 
    02  b 
    02  bb 
    02  bbb 
    现在想用SQL语句让上面的记录显示为 
    01  a 
        aa 
    02  b 
        bb 
        bbb 
    declare @t table(F1 varchar(8),F2 varchar(8))
    insert into @t values('01','a  ')
    insert into @t values('01','aa ')
    insert into @t values('02','b  ')
    insert into @t values('02','bb ')
    insert into @t values('02','bbb')select (case when exists(select 1 from @t where F1=t.F1 and F2<t.F2) then '' else F1 end) as NewF1,F2 
    from @t t 
    order by F1,F2
      

  2.   

    create table #a(Fname varchar(30),fqun decimal(18,2),fclass int ) 
    create table #b ( fclass int,name varchar(30)) 
    insert into #a 
    select 'a',20,1 
    union all 
    select 'a',20,2 
    union all 
    select 'a',20,3 
    union all 
    select 'B',10,1 
    union all 
    select 'B',10,2 insert into #b 
    select 1,'A' 
    union 
    select 2,'B' 
    union 
    select 3,'C' select (case when exists(select 1 from #a  where Fname=t.Fname  and fclass<t.fclass) then '' else Fname end) as Fname
    ,(case when exists(select 1 from #a  where fqun=t.fqun  and fclass<t.fclass) then '' else  ltrim(fqun) end) as fqun
    ,t.fclass, x.name
    from #a t 
    left join #b x on t.fclass=x.fclass
    order by t.Fname,t.fclassdrop table #b
    drop table #a/*Fname                          fqun                                      fclass      name
    ------------------------------ ----------------------------------------- ----------- ------------------------------
    a                              20.00                                     1           A
                                                                             2           B
                                                                             3           C
    B                              10.00                                     1           A
                                                                             2           B(5 行受影响)*/
      

  3.   

    select 
    case when a.fclass=1 then a.fname else '' end as fname,
    case when a.fclass=1 then ltrim(a.fqun) else '' end as fqun,
    a.fclass,
    b.name 
    from #a a inner join #b b on a.fclass = b.fclassfname fqun fclass name
    a 20.00 1 A
    2 B
    3 C
    B 10.00 1 A
    2 B
      

  4.   

    select 
    Fname=case when  not exists(select 1 from #a where Fname=a.Fname and fclass<a.fclass) then Fname else '' end,
    fqun=case when  not exists(select 1 from #a where fqun=a.fqun and fclass<a.fclass) then ltrim(fqun) else '' end,
    a.fclass,b.name 
    from #a a inner join #b b on a.fclass = b.fclass
    /*
    Fname                          fqun                                      fclass      name
    ------------------------------ ----------------------------------------- ----------- ------------------------------
    a                              20.00                                     1           A
                                                                             2           B
                                                                             3           C
    B                              10.00                                     1           A
    */                                                                         2           B
      

  5.   

    create table #a(Fname varchar(30),fqun decimal(18,2),fclass int ) 
    create table #b ( fclass int,name varchar(30)) 
    insert into #a 
    select 'a',20,1 
    union all 
    select 'a',20,2 
    union all 
    select 'a',20,3 
    union all 
    select 'B',10,1 
    union all 
    select 'B',10,2 insert into #b 
    select 1,'A' 
    union 
    select 2,'B' 
    union 
    select 3,'C' select a.*,b.name from #a a inner join #b b on a.fclass = b.fclass select Fnane=(case when exists (select 1 from #a where a.fname = fname and fclass<a.fclass) then '' else a.fname end)
    ,fqun=(case when exists (select 1 from #a where a.fname = fname and fclass<a.fclass) then '' else ltrim(a.fqun) end)
    ,a.fclass
    ,b.name
    from #a a
    inner join #b b
    on a.fclass =b.fclass
    order by a.Fname,a.fclassdrop table #a,#b