create table tb(姓名 varchar(10) , 课程 varchar(10) )
insert into tb values('张三' , '语文')
insert into tb values('张三' , '数学')
insert into tb values('张三' , '物理')
insert into tb values('李四' , '语文')
insert into tb values('李四' , '数学')
insert into tb values('李四' , '物理')
insert into tb values('李四' , '英语')
go
如上面的表。。
想出来这么一个表
-------------------------
姓名 语文 数学 物理 英语
张三 1 1 1 0
李四 1 1 1 1
---------------------------
首先把行跟列转换,然后如果有科目的记录,就在下面出“1”,没有的话出“0”
2003
SQL code
select
姓名,
sum(case 课程 when '语文' then 1 else 0 end) as 语文,
sum(case 课程 when '数学' then 1 else 0 end) as 数学,
sum(case 课程 when '物理' then 1 else 0 end) as 物理,
sum(case 课程 when '英语' then 1 else 0 end) as 英语
from
tb
group by
姓名
2005
select * from tb pivot(count(课程) for 课程 in(语文,数学,物理,英语)) p
declare @s varchar(4000)
select @s=ISNULL(@s+',','')+'['+课程+']' from (select distinct 课程 from tb)k
exec(
'select * from tb pivot (count(课程) for 课程 in ('+@s+')) k'
)