当前位置: 首页 > 图文教程 > 数据库 > MSSQL > sql server行转列问题终极解决

MSSQL
编程管理sql server的帐号
自己改写的一个sql server 2000的分页存储过程
通过SQL定时分析表监控Unix系统性能
SQL Server磁带数据备份
构造SQL Server的安全门
利用索引提高SQLServer数据处理效率
从SQL备份文件中导入现存数据库中
SQL2005较之SQL2000的改进
SQL SERVER2000中订阅与发布的具体操作
SQL Server中解决死锁的新方法介绍
SQL注入漏洞入侵的过程及其防范措施
查询分析器设置断点单步调试存储过程
SQL Server为Web浏览器提供图像
教你在SQL Server中由原子建立分子查询
关于SQL Server业务规则链接技术探讨
SQL Server 管理常用的SQL和T-SQL
探讨SQL Server数据库中空值处理技巧
SQL Server数据库中使用触发器经验谈
四项技术提高SQL Server性能
SQL Server 2000桌面引擎默认配置空口令漏洞

MSSQL 中的 sql server行转列问题终极解决


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 148 ::
收藏到网摘: n/a

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