有一个表是这样的
id    name    no
1     aa      10
2     aa      20
3     bb      30
希望获得如下结果
name    no1     no2
aa      10      20
bb      30
这个SQL怎么写啊,希望高手指教! 

解决方案 »

  1.   

    select
       name,
       max(case px when 1 then no end) as no1,
       max(case px when 2 then no end) as no2
    from
       (select px=row_number(partition by name order by getdate()),* from tb)t
    group by
       name
      

  2.   

    if not object_id('Class') is null  
        drop table Class  
    Go  
    Create table Class([Student] nvarchar(2),[数学] int,[物理] int,[英语] int,[语文] int)  
    Insert Class  
    select N'李四',77,85,65,65 union all  
    select N'张三',87,90,82,78  
    go  
      
    declare @s nvarchar(4000),@s2 nvarchar(4000),@s3 nvarchar(4000),@s4 nvarchar(4000)  
    select   
        @s=isnull(@s+',','declare ')+'@'+rtrim(Colid)+' nvarchar(4000)',  
        @s2=isnull(@s2+',','select ')+'@'+rtrim(Colid)+'='''+case when @s2 is not null then 'union all select' else ' select ' end+'  [科目]='''+quotename(Name,'''')+'''''',  
        @s3=isnull(@s3,'')+'select @'+rtrim(Colid)+'=@'+rtrim(Colid)+'+'',''+quotename([Student])+''=''+quotename('+quotename(Name)+','''''''')  from Class ',  
        @s4=isnull(@s4+'+','')+'@'+rtrim(Colid)  
    from   
        syscolumns   
    where  
        id=object_id('Class') and Name not in('Student')  
    --print @s+' '+@s2+' '+@s3+' exec('+@s4+')' 显示执行语句  
    exec(@s+' '+@s2+' '+@s3+' exec('+@s4+')')  
      
    /*  
    科目   李四   张三  
    ---- ---- ----  
    数学   77   87  
    物理   85   90  
    英语   65   82  
    语文   65   78  
    */  
      
      
    <PRE>  
    上面这个例子是动态的