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
那么结果是这样的
但是这是横表 不是我想看到的结果。
我们要看到这样的结果:
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
这是我工作遇到过得情况,总结下来。如果有遇到这种情况的话可以参考下。
相关推荐
-
SQL Server纵表与横表相互转换的方法
1,纵表转横表 纵表结构 Table_A: 转换后的结构: 纵表转横表的SQL示例: SELECT Name , SUM(CASE WHEN Course = N'语文' THEN Grade ELSE 0 END) AS Chinese , SUM(CASE WHEN Course = N'数学' THEN Grade ELSE 0 END) AS Mathematics , SUM(CASE WHEN Course = N'英语' THEN Grade ELSE 0 END) AS Engl
-
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 那么结果是这样的 但是这是横表 不是我想看到的结果. 我们要看到这样的结果: 那么怎么办呢?第一种写法: 复制代码 代码如下: SELECT w.SName, sum(
-
pandas使用之宽表变窄表的实现
我就废话不多说了,还是直接看代码吧! import pandas as pd # 伪造一些数据 fake_data = {'subject':['math', 'english'], 'A': [88, 90], 'B': [70, 80], 'C': [60, 78]} # 宽表 test = pd.DataFrame(fake_data, columns=['subject', 'A', 'B', 'C']) test subject A B C 0 math 88 70 60 1 engl
-
PGSQL查询最近N天的数据及SQL语句实现替换字段内容
目录 1.用SQL查询最近N天的数据 2.用SQL语句实现替换字段里的内容 3.SQL将查询结果赋值 4.SQL查询字段内容为 NULL值时候赋值 总结 1.用SQL查询最近N天的数据 思路:先获取当前的时间,然后更具当前时间去减去对应的天数,就可以得到需要的天数了.然后用这些天数作为条件,然后即可查询出需要多少天的数据了. -- 获取当前时间 SELECT CURRENT_TIMESTAMP; -- 或 SELECT now(); select CURRENT_TIMESTAMP :: DAT
-
Laravel中如何轻松容易的输出完整的SQL语句
前言 laravel 中自带的查询构建方法 toSql 得到的 sql 语句并未绑定条件参数,类似于这样 select * fromuserswhereid= ? ,所以写了个扩展包 laravel-dump-sql,可以获取完整的 sql 语句. 源码 laravel-dump-sql - github.com/guanguans/l- 安装 $ composer require guanguans/laravel-dump-sql -v 发布服务 $ php artisan vendor:p
-
mysql把一个表某个字段的内容复制到另一张表的某个字段的SQL语句写法
需求:把一个表某个字段内容复制到另一张表的某个字段. 实现sql语句1: 复制代码 代码如下: UPDATE file_manager_folder f1LEFT OUTER JOIN file_manager_folder f2 ON f1.name = f2.name AND f2.parentId = 54SET f1.parentId = 54 WHERE f2.name IS NULL AND f1.id IN (1,2,3); 实现sql语句2: 复制代码 代码如下: upd
-
SQL SERVER 表与表之间 字段一对多sql语句写法
表A A1 A2 A3 A4 01 02 03 04 03 04 01 02 表B B1 B2 01 张三 02 李四 03 王五 04 赵六 显示结果 A1 A2 A3 A4 张三 李四 王五 赵六 王五 赵六 张三 李四 效果图: sql语句如下 SELECT (SELECT B2 FROM B WHERE B1=A1) AS A1, (SELECT B2 FROM B WHERE B1=A2) AS A2, (SELECT B2 FROM B WHERE B1=A3) AS A3, (SE
-
sqlserver中在指定数据库的所有表的所有列中搜索给定的值
比如:我们导入了某个客户的资料,我们知道此客户的姓名是ZhangShan,我们想知道,在我们的业务数据库(eg:NorthWind)中,有哪些数据表的哪些字段设置了此姓名值ZhangShan,通过下面的SQL,我们就可以实现此目的,此处的SQL搜索自网上,在此处做了局部修改. 一.搜索数据是String类型 适用于搜索Text,NText,Varchar,Nvarchar,Char,NChar等类型 1.创建存储过程:My_Search_StringInGivenTable 复制代码 代码如下:
-
使用SQL语句查询MySQL,SQLServer,Oracle所有数据库名和表名,字段名
MySQL中查询所有数据库名和表名 查询所有数据库 show databases; 查询指定数据库中所有表名 select table_name from information_schema.tables where table_schema='database_name' and table_type='base table'; 查询指定表中的所有字段名 select column_name from information_schema.columns where table_schema
-
使用SQL查询所有数据库名和表名问题
目录 MySQL中查询所有数据库名和表名 SQLServer中查询所有数据库名和表名 Oracle中查询所有数据库名和表名 MySQL中查询所有数据库名和表名 查询所有数据库 show databases; 查询指定数据库中所有表名 方法一. use 数据库名 show tables: 方法二. select table_name from information_schema.tables where table_schema='数据库名' and table_type='BASE TABLE
-
MySQL中查询所有数据库占用磁盘空间大小和单个库中所有表的大小的sql语句
查询所有数据库占用磁盘空间大小的SQL语句: 复制代码 代码如下: select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),' MB') as data_size,concat(truncate(sum(index_length)/1024/1024,2),'MB') as index_sizefrom information_schema.tablesgroup by TABLE_SCHEMAorder by dat
随机推荐
- MySQL主从复制的原理及配置方法(比较详细)
- flex 安全沙箱问题备忘
- 使用socket进行服务端与客户端传文件的方法
- ASP.NET实现用图片进度条显示投票结果
- MySQL中视图的使用及多表INNER JOIN的技巧分享
- shell脚本实现的网站日志分析统计(可以统计9种数据)
- JS实现带提示的星级评分效果完整实例
- 对Js OOP编程 创建对象的一些全面理解
- Java对象的序列化与反序列化详解
- Python 正则表达式入门(中级篇)
- C#中基于流的XML文件操作笔记
- android中ProgressDialog与ProgressBar的使用详解
- 清空iis log 中自己登录ip的vbs
- 路由器网络接口解析大全一
- 深入理解JavaScript和TypeScript中的class
- 微信小程序实现的canvas合成图片功能示例
- 在python中用print()输出多个格式化参数的方法
- Python 二叉树的层序建立与三种遍历实现详解
- layer弹出层自定义提交取消按钮的例子
- Python DataFrame设置/更改列表字段/元素类型的方法