日期:2014-05-18  浏览次数:20520 次

不等记录数的行列转换
如何实现将表中的行变为列:
表   tab
大类号 小类号
A a1
A a2
A a2
B b1
C c1
C c2
通过SQL语句实现如下转换:
A B C
a1 b1 c1
a2 c2
a2


------解决方案--------------------
create table #aa (mx varchar(20),mi varchar(20))
insert into #aa
select 'A ', 'a1 ' union all
select 'A ', 'a2 ' union all
select 'A ', 'a3 ' union all
select 'B ', 'b1 ' union all
select 'C ', 'c1 ' union all
select 'C ', 'c2 '


select
max(case when mx= 'a ' then mi end) A,
max(case when mx= 'b ' then mi end) b,
max(case when mx= 'c ' then mi end) c
from
(select *,(select count(1) from #aa where a.mx=mx and a.mi> =mi) co from #aa a)a
group by co


A b c
-------------------- -------------------- --------------------
a1 b1 c1
a2 NULL c2
a3 NULL NULL

(所影响的行数为 3 行)