主要应用case语句来解决行转列的问题 行转列问题主要分为两类

1)简单的行转列问题:

示例表:

     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

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

相关文章: