sqlserver中查询横表变竖表的sql语句简析

网络编程 2025-03-13 11:06www.168986.cn编程入门

面对数据库中的三张表:课程表(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

```

以上两种写法均可以将横表转化为竖表,展示每个学生的各科目成绩。遇到类似情况的朋友们,可以参考这两种写法来解决遇到的问题。

上一篇:JavaScript实现文字跟随鼠标特效 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by