Sql server 中将数据行转列列转行(二)
老规矩,先弄一波测试数据,数据填充代码没有什么意义,先折叠起来:
/*
第一步:创建临时表结构
*/
CREATE TABLE #Student --创建临时表
(
StuName nvarchar(20), --学生名称
Chinese int,
Math int,
English int
)
DROP TABLE #Student --删除临时表
SELECT * FROM #Student --查询所有数据 INSERT INTO #Student(StuName,Chinese,Math,English) VALUES('张三',70,86,96);
INSERT INTO #Student(StuName,Chinese,Math,English) VALUES('李四',49,85,86);
INSERT INTO #Student(StuName,Chinese,Math,English) VALUES('王五',59,58,90);
INSERT INTO #Student(StuName,Chinese,Math,English) VALUES('赵六',68,79,80);
一:列转行,下面是转换之前与之后的截图对比
如果想要行转列,参考上一篇:Sql server 中将数据行转列列转行(一)
方法一:使用 UNION ALL 拼接多个结果集
SELECT * FROM (
SELECT StuName,课程='语文',分数=Chinese FROM #Student
UNION ALL
SELECT StuName,课程='数学',分数=Math FROM #Student
UNION ALL
SELECT StuName,课程='英语',分数=English FROM #Student
)AS TE
ORDER BY TE.StuName ASC
方法二:使用UNPIVOT,推荐此方法;
SELECT *
FROM #Student
UNPIVOT (分数 FOR 课程 IN([Chinese],Math,English)) T
方法三:使用UNPIVOT,处理动态列情况,看过我上一篇内容的,应该知道,在进行行转列的时候,有时候不太确定到底有多少行的可能,
会有动态的情况,但是在处理列转行的情况时,一般每个数据库在进行数据存储的时候,列有多少个,都是已经确定的,不存在不确定性,
所以,第三种方法知道就可以了,实用性不大,不推荐此方法。
DECLARE @sql NVARCHAR(4000) SELECT @sql=isnull(@sql+',','')+quotename(Name)
FROM syscolumns
WHERE ID=object_id('Student')
AND Name NOT IN('StuName') --不显示学生名称列
ORDER BY Colid
--print @sql
SET @sql='
SELECT *
FROM #Student
UNPIVOT (分数 FOR 课程 IN('+@sql+')) T
'
Exec(@sql)
注意:上面的这一部分,由于查询了syscolumns 数据库内置系统表,我演示的数据是临时表,是查不到任何数据的,必须创建实际的数据库表才可以使用。
Sql server 中将数据行转列列转行(二)的更多相关文章
- Sql server 中将数据行转列列转行(一)
在做一些数据分析与数据展示时,经常会遇到行转列,列转行的需求,今天就来总结下: 在开始之前,先来创建一个临时表,并且写入一些测试数据: /* 第一步:创建临时表结构 */ CREATE TABLE # ...
- 在SQL Server中将数据导出为XML和Json
有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做 ...
- SQL Server 插入数据时自增长列如何指定数值
SQL Server 表在导入数据时,有时需要将自增长列指定数值,来保证导入前后的数据完全一致,如何实现? SQL Server 提供了方法: SET IDENTITY_INSERT,允许将显式值插入 ...
- SQL SERVER 实现多行转多列
有这样一个需求,一个表单主表,一个扩展列表,查询的时候要把扩展列表中的多行转成主表多列. 比如 dt_zhubiao [主表] id type title 1 1 表单1-1 2 1 表单1-2 3 ...
- SQL Server中将多行数据拼接为一行数据(一个字符串)
表A中id与表B中aid为一对多的关系 例如: 表A: id name a1 tom a2 lily a3 lucy 表B: id aid value b1 a1 B1 b2 a1 B2 b3 a2 ...
- SQL Server中将多行数据拼接为一行数据并且有特殊字符
有表结构如下: 这时,要求显示所有学生的爱好的结果集,代码如下: ) as hobby FROM ( SELECT name, (SELECT hobby+',' FROM student WHERE ...
- 在SQL Server 2014里可更新的列存储索引 (Updateable Column Store Indexes)
传统的关系数据库服务引擎往往并不是对超大量数据进行分析计算的最佳平台,为此,SQL Server中开发了分析服务引擎去对大笔数据进行分析计算.当然,对于数据的存放平台SQL Server数据库引擎而言 ...
- 通过DBCC Page查看在SQL Server中哪行数据被锁住了?
原文:通过DBCC Page查看在SQL Server中哪行数据被锁住了? 如何查看被锁的是哪行数据?通过dbcc page可以. 要想明白这个问题: 首先,需要模拟阻塞问题,这里直接模拟了阻塞问题的 ...
- SQL Server获取指定行的数据
SQL Server获取指定行(如第二行)的数据 --SQL Server获取指定行(如第二行)的数据-- --法一(对象法)-- select * from ( select * , numbe ...
随机推荐
- CentOS Linux更改MySQL数据库目录位置
引言: 由于MySQL的数据库太大,默认安装的/var盘已经再也无法容纳新增加的数据,没有办法,只能想办法转移数据的目录. 下面我整理一下把MySQL从/var/lib/mysql目录下面转移到/ho ...
- C#将文件转成16进制码流写入数据库存起来,访问的时候再还原成PDF文件。
转自https://blog.csdn.net/liubowei_0312/article/details/53378146 适合将文件写入数据库,远程访问的时候还原1.首先把文件转成十六进制文件流 ...
- danci4
advantage 英 [əd'vɑːntɪdʒ] 美 [əd'væntɪdʒ] n. 优势:利益:有利条件 vi. 获利 vt. 有利于:使处于优势 lack 英 [læk] 美 [læk] vt. ...
- 一行代码搞定WordPress面包屑导航breadcrumb
有好几位网友在问WordPress面包屑导航breadcrumb怎么操作,网上有些教程是去function文件中定义,其实不用那么复杂,很简单一行代码就能搞定.下面随ytkah一起来看看.如果是单页, ...
- Touch事件 移动端touch触摸事件
<!-- HTML5 --> <!DOCTYPE html> <html> <head> <title>TouchEvent测试</t ...
- STM32启动代码详细分析
最近需要学习iap的功能,因此离不开stm32的启动代码的分析,以前看了很多遍,都看不懂,读书百遍,其义自见,因此我有看了一遍,下面的文章,挺好的,因此转载: 在上电复位后,我们都知道会先运行启动代码 ...
- 数据库连接的配置文件activation节点
在数据库连接连接不上的时候,一定要查看一下数据库的配置文件,<activeByDefault>这个节点比较关键,表示的是默认的连接数据库节点,当然配置文件中只能有一个这样的节点.否则是会报 ...
- LeetCode 1093. Statistics from a Large Sample
原题链接在这里:https://leetcode.com/problems/statistics-from-a-large-sample/ 题目: We sampled integers betwee ...
- Xamarin.Forms 开发热加载利器 HotReload 推荐
https://github.com/AndreiMisiukevich/HotReload
- 【loj3123】【CTS2019】重复
题目 给出一个长度为\(n\)的串\(s\),询问有多少个长度为\(m\)的串\(t\) 满足 \(t\) 的无限循环串存在一个长度为\(n\)且比\(s\)字典序严格小的子串 $ n , m \le ...