sql server行转列问题终极解决

1)简单的行转列

示例表result:

id  sid         course   result
1   2005001     语文     80.0
2   2005001     数学     90.0
3   2005001     英语     80.0
4   2005002     语文     56.0
5   2005002     数学     69.0
6   2005002     英语     89.0

执行

select sid,语文=isnull(sum(case course when '语文' then result end),0),
数学=isnull(sum(case course when '数学' then result end),0),
英语=isnull(sum(case course when '英语' then result end),0)
from result
group by sid
order by sid

得出结果

sid     语文  数学 英语
2005001 80.0  90.0  80.0
2005002 56.0  69.0  89.0


2)较为复杂的行转列

表1:course

id name
1  语文
2  数学
3  英语


表2:result

id sid          course    result
1 2005001     语文      80.0
2 2005001     数学      90.0
3 2005001     英语      80.0
4 2005002     语文      56.0
5 2005002     数学      69.0
6 2005002     英语      89.0

执行

declare @sql varchar(8000)
set @sql='select sid'
select @sql=@sql+','+course.name+'=isnull(sum(case course when '''+course.name+''' then result end),0)'
from course order by id
set @sql=@sql+' from result group by sid order by sid'
print @sql
exec(@sql)

得出结果

sid     语文  数学 英语
2005001 80.0  90.0  80.0
2005002 56.0  69.0  89.0

评论: 0 | 引用: 0 | 查看次数: 3386
发表评论
登录后再发表评论!