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 ...
随机推荐
- Awesome Flask Awesome
A curated list of awesome Flask resources and plugins Awesome Flask Framework Admin interface Authen ...
- 深度学习之卷积神经网络(CNN)学习
1.卷积神经网络中卷积的核心意义是什么?每一组卷集核 权重是一个抽特征的滤波器, 从卷集核的角度抽取特征 2.卷积神经网络很好的特性参数共享机制每一个神经元固定一组a x b x c(图像的通道数) ...
- python2代码批量转为python3代码
由于python存在python2和python3两个主要的版本方向,经常会有将python2的代码转到python3的环境下运行的需求.尤其是跑一些神经网络的代码时有很多是在python2的环境下写 ...
- sizeToFit的学习与认知
今天一扫前两日的坏心情,终于有心情平静下来,今天我是根据网络上的一些资料进行学习,今天学习的内容是 sizeToFit() 方法在不方便手动布局的场景中的使用. 首先感谢资料的提供者:参考1 参考2 ...
- 【216】◀▶ IDL 字符串操作说明 (黑底)
参考:String Processing Routines —— 字符串处理函数 参考:IDL_String Methods 01 STRING 返回字符串. 02 STRCMP 比较字符串, ...
- 生产环境下Flask项目目录构建
接触Flask已经有大半年了,本篇博客主要来探讨如何规范化生产环境下Flask的项目目录结构.虽然目录结构见仁见智,个人有个人的看法和习惯,但总的来说,经过很多人的实践和总结,还是有很多共同的意见和想 ...
- Flutter实战视频-移动电商-57.购物车_在Model中增加选中字段
57.购物车_在Model中增加选中字段 先修改model类 model/cartInfo.dart类增加是否选中的属性 修改provide 修改UI部分pages/cart_page/cart_it ...
- Black Box--[优先队列 、最大堆最小堆的应用]
Description Our Black Box represents a primitive database. It can save an integer array and has a sp ...
- ORA-22992:没法使用从远程表选择的LOB定位器
OLB 问题 ORA-22992:没法使用从远程表选择的LOB定位器 Create global temporary table temp on commit preserve rows as sel ...
- .NET Core 3.0之深入源码理解Configuration(三)
写在前面 上一篇文章讨论了文件型配置的基本内容,本篇内容讨论JSON型配置的实现方式,理解了这一种配置类型的实现方式,那么其他类型的配置实现方式基本可以触类旁通.看过了上一篇文章的朋友,应该看得出 ...