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

简单行转列,如何转换?
表1
danhao name shuliang
11 aa 10
22 bb 15
33 cc 20
.
.  

如何对上表进行行转列?表1 name有很多行,如何统计成下表,如何写?
danhao aa bb cc ..
11 10 0 0 ..
22 0 15 0
33 0 0 20 ..
.
.

------解决方案--------------------
/*
表1
danhao name shuliang
11 aa 10
22 bb 15
33 cc 20
.
.

如何对上表进行行转列?表1 name有很多行,如何统计成下表,如何写?
danhao aa bb cc ..
11 10 0 0 ..
22 0 15 0
33 0 0 20 ..
*/
go
if OBJECT_ID('tbl')is not null
drop table tbl
go
create table tbl(
danhao varchar(2),
name varchar(2),
shuliang int
)
go
insert tbl
select '11','aa',10 union all
select '22','bb',15 union all
select '33','cc',20


declare @str varchar(1000)
set @str=''
select @str=@str+','+name+
'=max(case when name='+QUOTENAME(name,'''')+' then shuliang else 0 end)'
from tbl
group by name
print @str
set @str='select danhao '+@str+' from tbl group by danhao'
print @str
exec(@str)
/*
danhao aa bb cc
11 10 0 0
22 0 15 0
33 0 0 20
*/