Sql 行转换为列 以及列转换为行的心得

这是 创建数据库的脚本文件
CREATE TABLE [dbo].[stu](
[学号] [nvarchar](255) NOT NULL,
[姓名] [nvarchar](255) NULL,
[性别] [nvarchar](255) NULL,
[专业] [nvarchar](255) NULL,
[院系] [nvarchar](255) NULL
) ON [PRIMARY] GO
INSERT [dbo].[stu] ([学号], [姓名], [性别], [专业], [院系]) VALUES (N'111405060432', N'王小明', N'男', N'金融系', N'经济学院')
INSERT [dbo].[stu] ([学号], [姓名], [性别], [专业], [院系]) VALUES (N'07102060215', N'王硕问', N'男', N'材料成型及控制工程', N'材料科学与工程学院')
INSERT [dbo].[stu] ([学号], [姓名], [性别], [专业], [院系]) VALUES (N'07104060407', N'冯静', N'女', N'金融学', N'经济学院')
INSERT [dbo].[stu] ([学号], [姓名], [性别], [专业], [院系]) VALUES (N'07108040122', N'王新哲', N'男', N'环境工程', N'化工与制药学院')
INSERT [dbo].[stu] ([学号], [姓名], [性别], [专业], [院系]) VALUES (N'07110020114', N'刘龙', N'男', N'应用物理学', N'物理与工程学院')
--------行值转为列值 使用Case语句 方法一
SELECT 学号
,Max(CASE 专业 WHEN '金融系' THEN 院系 else 院系 END) AS '金融系'
,Max(CASE 专业 WHEN '材料成型及控制工程' THEN 院系 else 院系 END) AS '材料成型及控制工程'
,Max(CASE 专业 WHEN '金融学' THEN 院系 else 院系 END) AS '金融学'
,Max(CASE 专业 WHEN '环境工程' THEN 院系 else 院系 END) AS '环境工程'
,Max(CASE 专业 WHEN '应用物理学' THEN 院系 else 院系 END) AS '应用物理学'
FROM
stu
GROUP BY 学号
go ------行转换列值 ------ 方法二
declare @sql varchar() select @sql=isnull(@sql+',','')+' max(case 专业 when '''+专业+''' then 院系 else 院系 end) ['+专业+']' from(select distinct 专业 from stu)as a set @sql='select 学号 ,'+@sql+' from stu group by 学号' exec(@sql)
go -----使用isnull()-----
declare @sql varchar() select @sql=isnull(@sql+',','')+ 专业 from stu group by 专业 set @sql='select * from stu pivot (max(院系) for 专业 in ('+@sql+'))a' exec(@sql)
go
----------使用pivot -------- select * -----要选取的列, * 代表选择全部
from stu -------从哪个结果集中选出数据
pivot(
max(院系) --聚合函数Max表示你需要怎样处理转换后的列的值,是总和(sum),还是平均(avg)还是min,max等等。
for 专业 ---- for 专业 就是说将 专业 列的值分别转换成一个个列,也就是“以值变列”。
in -------我们只想取其中几个值转换成列,那么怎样取呢?就是在in里面写要取的值
(材料科学与工程学院,经济学院,化工与制药学院,物理与工程学院,金融学))---
as b
go -----------列转行 ---------------------
-----使用SQL Server 2005动态SQL
declare @sql nvarchar() select @sql=isnull(@sql+',','')+quotename(Name)
from syscolumns
where ID=object_id('stu')and Name not in('姓名','学号','专业','性别')
order by Colid
set @sql='select 学号,姓名,[专业],性别 from stu unpivot ([aa] for [bb] in('+@sql+'))b'
exec(@sql)
go ------方法二------------
select * from
(
select 学号,姓名,性别,专业='金融系',院系='经济学院' from stu union all select 学号,姓名,性别,专业='材料成型及控制工程',院系='材料科学与工程学院' from stu union all select 学号,姓名,性别,专业='金融学',院系='经济学院' from stu ) t order by 学号
go
----------使用 unpivot----------
select aa,bb from stu unpivot (aa for bb in([院系],[专业])) t
---------列转行-----

--------行转列------

Sql 行转换为列 以及列转换为行的心得的更多相关文章
- SQL行转列,列转行
SQL 行转列,列转行 行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧. 行列转换就是如下图所示两种展示形式的互相转换 行转列 假如我们有下表: SELECT * FROM s ...
- Databricks 第11篇:Spark SQL 查询(行转列、列转行、Lateral View、排序)
本文分享在Azure Databricks中如何实现行转列和列转行. 一,行转列 在分组中,把每个分组中的某一列的数据连接在一起: collect_list:把一个分组中的列合成为数组,数据不去重,格 ...
- 做图表统计你需要掌握SQL Server 行转列和列转行
说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需要用到行转列和列转行. 1.列转行 数据经过计算加工后会直接生成 ...
- SQL 行转列和列转行
SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...
- SQL行转列和列转行
行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和 ...
- sql中的行转列和列转行的问题
sql中的行转列和列转行的问题 这是一个常见的问题,也是一个考的问题 1.行转列的问题 简单实例 CREATE TABLE #T ( MON1 INT, MON2 INT, MON3 INT ) G ...
- sql行转列和列转行(转)
行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和 ...
- (转载)重温SQL——行转列,列转行
原文地址:http://www.cnblogs.com/kerrycode/archive/2010/07/28/1786547.html 行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通 ...
- sql 行转列 PIVOT 列转行 UNPIVOT
原文:sql 行转列 PIVOT 列转行 UNPIVOT 一: 现有表一(t_table1),想转为表二(t_table2)的格式. 表一: 年 公司 收入 2013 公司1 12 2013 公司2 ...
- sql内置函数pivot强大的行转列功能
原文:sql内置函数pivot强大的行转列功能 语法: PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVO ...
随机推荐
- Mysql数据库--语句整理/提升/进阶/高级使用技巧
一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...
- TQ210 —— S5PV210 uboot顶层Makefile分析
转自:http://blog.csdn.net/wqx521/article/details/52469759 # (C) Copyright 2000-2008 # Wolfgang Denk, D ...
- 使用 SourceTree 管理ios项目
SourceTree 是一个非常优秀的版本控制软件,他是一个客户端,方便我们去接入 GitHub .BitBucke 上面托管的代码. 声明(1——4是来自简书的非个人作品,仅仅保存资料学习使用) 一 ...
- jquery : eval() 解析json的注意
jquery eval解析JSON中的注意点介绍 来在:http://www.jb51.net/article/40842.htm 在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: ...
- Flutter实战视频-移动电商-62.购物车_首页Provide化 让跳转随心所欲
62.购物车_首页Provide化 让跳转随心所欲 新建provide/currentIndex.dart 内容比较简单,定义一个变量当前页面的索引currentIndex,再定义一个方法改变它的值 ...
- 洛谷 - P3966 - 单词 - AC自动机
https://www.luogu.org/problemnew/show/P3966 因为文本串就是字典本身,所以这个和平时的AC自动机不太一样.平时的query要沿着fail树把子树的出现次数依次 ...
- (水题)Codeforces - 4C - Registration system
https://codeforces.com/problemset/problem/4/C 用来哈希的一道题目,用map也可以强行过,但是性能慢了6倍,说明是在字符串比较的时候花费了接近6倍的时间. ...
- 201621123016 《Java程序设计》第十一周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1. 源代码阅读:多线程程序BounceThread 1.1 BallR ...
- tinyxml一些应注意的问题
今天在对使用tinyxml库的程序调试的时候,出现的一些问题让人很纠结,特记以此... 在对TixmlDocument创建时我是用new创建的,然后在用完之后我用delete释放掉,可是用gdb调试 ...
- [Xcode 实际操作]九、实用进阶-(19)重写父类的绘图方法,使用图形上下文绘制自定义图形
目录:[Swift]Xcode实际操作 本文将演示如何使用图形上下文,绘制自定义图形. 使用快捷键[Command]+[N]创建一个新的类文件. (在项目文件夹[DemoApp]上点击鼠标右键[New ...