★★★★★★★★★★★★★★★★★★一个简单的查询语句,却不能简单的写出来■■■■■■■■■■■■■■■■■■■■■■■■■■■
表1 
 a      b 
 1   2 
 1   3 
 1   4 
 2   5 
 2   6 
 3   7 
 3   8 
 3   9 
 想要的结果 
 列1   列2   列3 
    1         1         1 
 2            2         null 
 3            3         3
------解决方案--------------------up 
 关注
------解决方案--------------------其实不是太难 
 在创建新的一例c 
 字段的内容和a相同 
 然后 
 把c和b做成交叉表 
 那么转化之后c列下面的内容就是a 
 交叉表例子很多 
 有动态的也有静态的 
 这样问题解决
------解决方案--------------------create table TT1( 
 a int,   
 b int 
 ) 
 insert TT1 select 
 1, 2 
 union all select 
 1, 3 
 union all select 
 1, 4 
 union all select 
 2, 5 
 union all select 
 2, 6 
 union all select 
 3, 7 
 union all select 
 3, 8 
 union all select 
 3, 9   
 go   
 declare @t table( 
 a int, 
 id int 
 )     
 declare  @Max int 
 select top 1 @Max=count(*) from TT1 group by a order by count(*) desc   
 declare @sql varchar(8000) 
 set @sql= ' ' 
 declare @sql1 varchar(8000) 
 set @sql1= ' ' 
 declare  @i int 
 set @i=1 
 while @i <=@Max 
 begin 
 	set @sql1=@sql1+ ',max([列 '+cast(@i as varchar)+ ']) as [列 '+cast(@i as varchar)+ '] '   
 	set @sql=@sql+ ',case when (select count(*) from TT1 where a=t.a and b <=t.b)= '+cast(@i as varchar)+ ' then a end as [列 '+cast(@i as varchar)+ '] ' 
    	set @i=@i+1 
 end 
 set @sql1=stuff(@sql1,1,1, ' ')   
 exec( 'select  ' + @sql1+  'from ( select a '+@sql+ ' from TT1 t) as t1 group by a ')     
 drop table TT1   
 --结果 
 列1          列2          列3           
 ----------- ----------- -----------  
 1           1           1 
 2           2           NULL 
 3           3           3   
 警告: 聚合或其它 SET 操作消除了空值。