sql server行转列问题终极解决

王朝mssql·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

主要应用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

得出结果

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

http://blog.csdn.net/tthxqttzln/archive/2007/02/02/1500825.aspx

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航