★★★★★★★★★★★★★★★★★★一个简单的查询语句,却不能简单的写出来■■■■■■■■■■■■■■■■■■■■■■■■■■■
表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 操作消除了空值。