SQL Server 2000:
在一些统计报表中,常常会用到将行结果用列形式展现。我们这里用一个常见的学生各门课程的成绩报表,来实际展示实现方法。
我们用到的表结构如下:
三张表的关系为:
现有的测试数据为:
我们需要的结果是:
SQL语句如下:
SQL SERVER 2005 中,已经有实现此功能的内置方法了。
SQL SERVER 2005中新增加了两个关系运算符 PIVOT/ UNPIVOT,能够实现表中的列转换到行,以及行到列的转换工作。
举例,还是先创建测试数据表 :
我们想要得到类似这样的结果:
Year Jan Feb Mar …………..
—– ———- ———– ———–
2004 789.0000 389.0000 8867.0000 ………….
2005 7.0000 6868.0000 688.0000 …………..
用上面介绍的方法当然可以实现,但现在这里想要的列是固定的,不是动态的,就是12个月,所以也可以这样子来用:
但这样事实上还是相当麻烦的,现在SQLSERVER2005中有更方便的实现方法。
就是这样,很简单的用法,效果是完全一样的。
我们再尝试一下把year去掉:
得到的结果是:
Jan Feb Mar …
———- ———— ———–
796.0000 7257.0000 9555.0000 …
同一个月份的数据累加到一起。
再给个微软官方的例子: