sqlserver中查询横表变竖表的sql语句简析
面对数据库中的三张表:课程表(CNo对应课程)、人员表(S)以及成绩表(SC),如何将横表转变为竖表展示,是我们在工作中经常遇到的问题。下面,我将通过两种SQL查询方式来解决这个问题,以供大家参考。
我们按照常规查询方式,将人员表(S)、成绩表(SC)和课程表进行内连接,查询语句如下:
```sql
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
```
查询结果呈现的是横表形式,可能无法满足我们的需求。我们希望得到的结果是竖表形式,展示每个学生的语文、数学、英语等课程的成绩。
针对这个问题,我们可以采用以下两种写法来实现竖表的查询结果:
第一种写法:
```sql
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
```
第二种写法:
```sql
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
```
以上两种写法均可以将横表转化为竖表,展示每个学生的各科目成绩。遇到类似情况的朋友们,可以参考这两种写法来解决遇到的问题。
编程语言
- sqlserver中查询横表变竖表的sql语句简析
- JavaScript实现文字跟随鼠标特效
- SQL Server数据库删除数据集中重复数据实例讲解
- ThinkPHP模板中数组循环实例
- 浅析JS获取url中的参数实例代码
- FCKEditor超级链接默认新窗口打开的修改方法
- SQL 平均数统计
- SQL Server中Table字典数据的查询SQL示例代码
- php使用get_class_methods()函数获取分类的方法
- SQL语句删除2条重复数据一条保留一条
- PHP使用MPDF类生成PDF的方法
- 如何使用php判断服务器是否是HTTPS连接
- PHP自毁程序(慎用)
- DataGridView单元格显示多行的设置方法
- javascript 判断是否是微信浏览器的方法
- JavaScript整除运算函数ceil和floor的区别分析