加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

sqlserver中查询横表变竖表的sql语句介绍

发布时间:2021-12-02 09:26:41 所属栏目:PHP教程 来源:互联网
导读:首先是三张表, 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 那么结果是这样的 但是这是横表 不是我想看到的结果。
首先是三张表, 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
 
 

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读