MS-SQLServer 2000 T-SQL 交叉报表(行列互换) 交叉查询 旋转查询
在MS-SQLServer 2005和oracle 中可以使用Pivot 和 Unpivot来做行列转换,不过不支持动态列哦。 在这里使用 case when then else end 语句,来实现行列转换. 如何实现动态列在最下面。 下面以学生成绩表来举例: id姓名 科目 成绩 1?张三?语文?60 查询后得出: 姓名?语文数学外语 李四?80? 90? 85 准备数据: select * from sysobjects where [xtype]='u' select * from studentscore --添加实验数据 我们先利用case when then else end 语句将行转为列: select [name],语文=case when subject='语文' then score else 0 end from studentscore group by [name],subject,score 这里为了好理解只取一列,得到下面的结果 有了语文成绩行专列的例子后,我们很容易将其他两列也添加进来, select [name], 下面是查询后的结果: 现在只要把name相同的行合并到一起就ok了, 好了,看看结果吧. 上面是列数可枚举时的代码,很多情况下到底有多少列是动态的或者不可知的. 这个时候需要拼下SQL语句了. declare @sql varchar(8000) set @sql = 'select [name],' ? 这个语句还可以再优化些,呵呵. end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server – 使用HTTP Post将数据从excel发送到服务器
- Mysql字符串处理函数详细介绍、总结
- sqlserver---获取前一天的数据
- SQLServer中的全局变量
- sql-server – 如何获取SQL Server表中每行的实际数据大小?
- sql-server – 如何将数据库从SQL Server 2012移动到SQL Se
- .net – 为什么string.Join(string,object [])特别?
- sql2005 本地计算机上的SQL SERVER服务启动后又停止了解决方
- 数据库 – 有人可以推荐合成数据生成器吗?
- 动态Tableslist传输SQLSERVER对象