SQLServer如何处理数据集的维度变化
Student表有三列,分别是姓名、课程、成绩
Name Curricula Mark
张三 语文 70
李四 数学 80
王朝 英语 59
城南 马哲 70
王朝 语文 90
我想得到的效果是,列出各个学科及格的人名:
语文 化学 数学
张三 李四
王朝
学科不止3门,可能有八门怎么弄呢?其实这就是典型的维度方向变化.
准备数据:
create table stgrade(Name varchar(10), Curricula varchar(10) , Mark int);
go
insert into stgrade values('张三' , '语文','70' );
insert into stgrade values('李四' , '数学','80');
insert into stgrade values('王朝' , '英语','59');
insert into stgrade values('城南' , '马哲','70' );
insert into stgrade values('王朝' , '语文','90' );
go
select * from stgrade;
Name Curricula Mark
张三 语文 70
李四 数学 80
王朝 英语 59
城南 马哲 70
王朝 语文 90
用case when 来实现根据column的值来返回同一行别的column的值,因为我们这里不需要分数,只关心Curricula 和name,所以是在分数赛选过后,进行一个case when操作.
select
case when Curricula='语文' then name end 语文,
case when Curricula='数学' then name end 数学,
case when Curricula='英语' then name end 英语,
case when Curricula='马哲' then name end 马哲
from stgrade where mark>59
语文 数学 英语 马哲
张三 NULL NULL NULL
NULL 李四 NULL NULL
NULL NULL NULL 城南
王朝 NULL NULL NULL
又上面已经可以看到结果集合已经初具雏形了,要是更让每个column下的NULL消失,然后后面行的值补上来就能达到我们的要求了。
select
case when Curricula='语文' then name end 语文,
case when Curricula='数学' then name end 数学,
case when Curricula='英语' then name end 英语,
case when Curricula='马哲' then name end 马哲,
sn
from
(
select curricula,name,mark,
row_number() over(partition by curricula order by name) sn
from stgrade where mark>59
) t
语文 数学 英语 马哲 sn
NULL NULL NULL 城南 1
NULL 李四 NULL NULL 1
王朝 NULL NULL NULL 1
张三 NULL NULL NULL 2
select sn,
max(case when Curricula='语文' then name end) 语文,
max(case when Curricula='数学' then name end) 数学,
max(case when Curricula='英语' then name end) 英语,
max(case when Curricula='马哲' then name end) 马哲
from
(
select curricula,name,mark,
row_number() over(partition by curricula order by name) sn
from stgrade where mark>59
) t
group by sn
sn 语文 数学 英语 马哲
1 王朝 李四 NULL 城南
2 张三 NULL NULL NULL
SQLServer如何处理数据集的维度变化的更多相关文章
- 深度学习实践-物体检测-faster-RCNN(原理和部分代码说明) 1.tf.image.resize_and_crop(根据比例取出特征层,进行维度变化) 2.tf.slice(数据切片) 3.x.argsort()(对数据进行排列,返回索引值) 4.np.empty(生成空矩阵) 5.np.meshgrid(生成二维数据) 6.np.where(符合条件的索引) 7.tf.gather取值
1. tf.image.resize_and_crop(net, bbox, 256, [14, 14], name) # 根据bbox的y1,x1,y2,x2获得net中的位置,将其转换为14*1 ...
- SSAS多维数据集以及维度的建立
首先打开vs建立一个Analysis Services项目,然后点击数据源文件右键[新建数据源],根据数据源向导建立自己的数据源,如图1: 点击[确定],选择刚才的数据连接,点击[下一步]进入模拟信息 ...
- Pytorch-tensor的维度变化
引言 本篇介绍tensor的维度变化. 维度变化改变的是数据的理解方式! view/reshape:大小不变的条件下,转变shape squeeze/unsqueeze:减少/增加维度 transpo ...
- Sqlserver存储过程生成日期维度
话不多说,之前已经有一篇日志是利用oracle的存储过程生成日期维度表,接下来我们就用sqlserver来实现这个操作,如下面的步骤所示 1:创建日期维度表(Dim_time) USE [DW] GO ...
- sqlserver 理解数据集
数据集分四类: 1.A∩B,既是所求数据集既在A中,又在B中 2.A∪B,既所求数据在数据集A中,或在数据集B中 3.A-B,既所求数据在数据集A中,不在数据集B中 4.B-A,既所求数据在数据集B中 ...
- 监测SQLServer数据库中表的数据变化 方案
sqlDependency提供了这样一种能力:当被监测的数据库中的数据发生变化时,SqlDependency会自动触发OnChange事件来通知应用程序,从而达到让系统自动更新数据(或缓存)的目的. ...
- 经典网络LeNet5看卷积神经网络各层的维度变化
本文介绍以下几个CNN经典模型:Lenet(1986年).Alexnet(2012年).GoogleNet(2014年).VGG(2014年).Deep Residual Learning(2015年 ...
- 微软BI 之SSAS 系列 - 多维数据集维度用法之三 多对多维度 Many to Many
开篇介绍 对于维度成员和事实数据直接的关系看到更多的可能还是一对一,一对多的关系.比方在事实维度(或退化维度)中一个订单和明细号组合而成的ID,对应的就是事实表中的一条数据,这就是一对一的关系.比方说 ...
- 8.进行图片的裁剪,同时使用resize将图片的维度进行变化
1.img.crop((x1, y1, x2, y2)) 进行图片的裁剪 参数说明: x1, y1, x2, y2 表示图片的大小 2. img.resize((w, h)) # 进行图片的维度变化 ...
随机推荐
- JS实现上下左右四方向无间隙滚动
想必大家都注意到<marquee>的不循环滚动,所以出现了很多替代脚本,或iframe或JS输出< marquee>,不管怎么做,都略显麻烦.下面说一下这个相对简单的实现思路: ...
- Sublime Text 2的快速入门和常用技巧
1. 安装扩展器包管理器Package Control组件 点击菜单 View -> Show Console 调出控制台或者按快捷键 “Ctrl + `”(1左边的符号,可能和QQ拼音输入法和 ...
- 象写程序一样写博客:搭建基于github的博客
象写程序一样写博客:搭建基于github的博客 前言 github 真是无所不能.其 Pages 功能 支持上传 html,并且在页面中显示.于是有好事者做了一个基于 github 的博客管理工具 ...
- 关于Stock Quant与生产内容的理解
Stock Quant对象是8.0中新增加的内容,主要用于核算库存,与Stock Move相关联,没个Stock Move动作都会关联一个或者多个Stock Quant对象.库存移动的过程实际上就是将 ...
- salt安装zabbix
states文件: [root@super65 base]# cat top.sls base: '*': - init.env_init[root@super65 base]# cat init/e ...
- Windows Server 2012 FTP配置 后客户机一直登录不上
配置FTP时出现奇怪的问题,服务器配置完成后客户机访问FTP站点时输入用户名密码一直不对. 经多次试验后发现,默认情况下是如下图配置.将用户下次登录时必须更改密码勾掉,勾选密码永不过期即可正常登录.
- 用java简单的实现单链表的基本操作
package com.tyxh.link; //节点类 public class Node { protected Node next; //指针域 protected int data;//数据域 ...
- android之TabHost(下)
首先建立res/layout/tab.xml文件 编写代码如下: <?xml version="1.0" encoding="utf-8"?> &l ...
- storm在linux系统下安装调试
安装: 安装 zookeeper : 下载 zookeeper :http://zookeeper.apache.org/releases.html#download. 将 zookeeper-3.4 ...
- 转载:C/C++源代码到可执行程序的过程详解
C/C++源代码到可执行程序的过程详解 编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格 ...