sqlserver中查询横表变竖表的sql语句简析
2013-05-24 16:26
330 查看
sqlserver中查询横表变竖表的sql语句简析
首先是三张表, CNo对应的是课程,在这里我就粘贴了。
主表
人名表
按照常规查询
SELECT s.SName, c.CName,s2.SCgrade
FROM S s INNER JOIN SC s2 ON s2.SNo = s.SNo INNER JOIN C c ON c.CNo = s2.CNo
那么结果是这样的
但是这是横表 不是我想看到的结果。
我们要看到这样的结果:
那么怎么办呢?
第一种写法:
第二种写法:
这是我工作遇到过得情况,总结下来。如果有遇到这种情况的话可以参考下。http://www.smalluv.com/mssql_211.html
首先是三张表, CNo对应的是课程,在这里我就粘贴了。
主表
人名表
按照常规查询
SELECT s.SName, c.CName,s2.SCgrade
FROM S s INNER JOIN SC s2 ON s2.SNo = s.SNo INNER JOIN C c ON c.CNo = s2.CNo
那么结果是这样的
但是这是横表 不是我想看到的结果。
我们要看到这样的结果:
那么怎么办呢?
第一种写法:
SELECT w.SName, sum(case when w.CNo= 1 then w.SCgrade ELSE 0 END) AS '语文', sum(case WHEN w.CNo =2 THEN w.SCgrade ELSE 0 END) AS '数学', sum(case when w.CNo= 3 then w.SCgrade ELSE 0 END) AS '英语' FROM (SELECT s.SNo,s.SName, s2.CNo, s2.SCgrade FROM s s INNER JOIN SC s2 ON s2.SNo = s.SNo WHERE s.SNo IN (SELECT c.SNo FROM sc c GROUP BY c.SNo )) AS w GROUP BY w.SName
第二种写法:
SELECT s.SName, sum(case when s2.CNo= 1 then s2.SCgrade ELSE 0 END) AS '语文', sum(case WHEN s2.CNo =2 THEN s2.SCgrade ELSE 0 END) AS '数学', sum(case when s2.CNo= 3 then s2.SCgrade ELSE 0 END) AS '英语' FROM S s INNER JOIN SC s2 ON s2.SNo = s.SNo INNER JOIN C c ON c.CNo = s2.CNo GROUP BY s.SNo, s.SName
这是我工作遇到过得情况,总结下来。如果有遇到这种情况的话可以参考下。http://www.smalluv.com/mssql_211.html
相关文章推荐
- 最强的sql server中查看连接数据的查询语句
- sql server/SQL语句 数据库跨表/或跨数据库查询
- SQL Server SQL高级查询语句小结
- sql语句查询 sql server access 数据库里的所有表名,字段名
- sql server中的一些基本查询语句
- sql server select查询语句 我想把AS后面重命名的列名 作为where语句的条件
- SQL-Server 存储过程查询速度,使用查询语句检测
- SQL Server SQL高级查询语句小结
- sqlserver中查询横表变竖表的sql语句简析
- 【sql server inject】使用动态查询执行sql语句实例
- SQL Server SQL高级查询语句小结
- SQL Server SQL高级查询语句小结
- SQL Server SQL高级查询语句小结
- SQL Server Extended Events使用1: 查询运行时间久的SQL语句
- 查询SQL Server并行计划的语句
- SQL-Server 这个查询语句怎么写?
- .Net+SQL Server企业应用性能优化笔记3——SQL查询语句
- SQL Server SQL高级查询语句小结
- .Net+SQL Server企业应用性能优化笔记3——SQL查询语句
- SQL server T-sql语句查询执行顺序