在做数据统计的时候,行转列,列转行是经常碰到的问题。case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比较快速实现行转列,列转行,而且可扩展性强

一、行转列

1、测试数据准备

CREATE TABLE [StudentScores]

(

[UserName] NVARCHAR(20), --学生姓名

[Subject] NVARCHAR(30), --科目

[Score] FLOAT, --成绩

)

INSERT INTO [StudentScores] SELECT '张三', '语文', 80

INSERT INTO [StudentScores] SELECT '张三', '数学', 90

INSERT INTO [StudentScores] SELECT '张三', '英语', 70

INSERT INTO [StudentScores] SELECT '张三', '生物', 85

INSERT INTO [StudentScores] SELECT '李四', '语文', 80

INSERT INTO [StudentScores] SELECT '李四', '数学', 92

INSERT INTO [StudentScores] SELECT '李四', '英语', 76

INSERT INTO [StudentScores] SELECT '李四', '生物', 88

INSERT INTO [StudentScores] SELECT '码农', '语文', 60

INSERT INTO [StudentScores] SELECT '码农', '数学', 82

INSERT INTO [StudentScores] SELECT '码农', '英语', 96

INSERT INTO [StudentScores] SELECT '码农', '生物', 78

2、行转列sql

SELECT * FROM [StudentScores] /*数据源*/

AS P

PIVOT

(

SUM(Score/*行转列后 列的值*/) FOR

p.Subject/*需要行转列的列*/ IN ([语文],[数学],[英语],[生物]/*列的值*/)

) AS T

执行结果:

二、列转行

1、测试数据准备

CREATE TABLE ProgrectDetail

(

ProgrectName NVARCHAR(20), --工程名称

OverseaSupply INT, --海外供应商供给数量

NativeSupply INT, --国内供应商供给数量

SouthSupply INT, --南方供应商供给数量

NorthSupply INT --北方供应商供给数量

)

INSERT INTO ProgrectDetail

SELECT 'A', 100, 200, 50, 50

UNION ALL

SELECT 'B', 200, 300, 150, 150

UNION ALL

SELECT 'C', 159, 400, 20, 320

UNION ALL

2、列转行的sql

SELECT P.ProgrectName,P.Supplier,P.SupplyNum

FROM

(

SELECT ProgrectName, OverseaSupply, NativeSupply,

SouthSupply, NorthSupply

FROM ProgrectDetail

)T

UNPIVOT

(

SupplyNum FOR Supplier IN

(OverseaSupply, NativeSupply, SouthSupply, NorthSupply )

) P

执行结果:

mysql unpivot_SQL行转列(PIVOT)与列转行(UNPIVOT)简明方法相关推荐

  1. oracle unpivot 索引_Oracle 行转列pivot 、列转行unpivot 的Sql语句总结

    这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_user select id||username str from ap ...

  2. mysql 列转行 unpivot_sql的行转列(PIVOT)与列转行(UNPIVOT)

    一.行转列 1.测试数据准备 CREATE TABLE [StudentScores] ( [UserName] NVARCHAR(20), --学生姓名 [Subject] NVARCHAR(30) ...

  3. Oracle 行转列pivot 、列转行unpivot 的Sql语句总结

    多行转字符串 这个比较简单,用||或concat函数可以实现 [sql] view plaincopy print? select concat(id,username) str from app_u ...

  4. sql的行转列(PIVOT)与列转行(UNPIVOT)

    在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比较快速实现行转列,列转行,而且可扩展性强 一.行转列 1.测 ...

  5. unpivot用法 oracle10g,Oracle 行转列pivot 、列转行unpivot 的Sql语句总结(转)

    多行转字符串 这个比较简单,用||或concat函数可以实现 1 select concat(id,username) str from app_user 2 3 select id||usernam ...

  6. mysql将行显示成列_mysql – 在表中将行显示为列

    我有一张像下面这样的表 CREATE TABLE Statistics(Stat_Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Period VARCHAR( ...

  7. 关于mysql的行转列问题

    关于mysql的行转列问题 一张表,里面有  id  name   state    customerid 4个字段,其中status有3个值0 1 2 ,用一条sql查询出此种格式 customer ...

  8. Oracle之行转列pivot函数

    文章目录 方法一: Oracle行转列pivot函数 方法二:使用MAX DECODE 实现 方法一: Oracle行转列pivot函数 语法:pivot(任一聚合函数 for 需要转列的值所在列名 ...

  9. MySQL 动态 行转列

    MySQL 动态 行转列 1.需求 2.建表 3.插入数据 4. 转换前结果 5. 动态转换 1.需求 在每一行的内容不确定的情况下,需要动态的把行转为列. 2.建表 DROP TABLE IF EX ...

最新文章

  1. 如何使用pyecharts中的主题样式?
  2. Python程序设计题解【蓝桥杯官网题库】 DAY3-基础练习
  3. 手机哪个好用计算机,手机计算器软件哪个好用
  4. 聊聊flink的MemoryPool
  5. 深入分析JavaWeb Item7 -- HttpServletResponse详解
  6. ASP.NET Core 网站在Docker中运行
  7. opengl 深度详解_一步步学OpenGL(23) -《阴影贴图1》
  8. 微信公众平台服务器 反馈,微信公众号开发之大坑
  9. .Net 下信号量(Semaphore)的一种实现
  10. C#.NET快速开发框架-企业版V4.0截图打包下载
  11. Python黑帽子——通过Paramiko使用SSH
  12. 最值得收藏的 人工智能导论 全部知识点思维导图整理(王万良慕课课程)
  13. Matlab中xlsread 函数读取excel表格数据或者字符串
  14. 9.2-Scrapy框架爬虫【进阶】-spiders用法
  15. 面对5400万抑郁症患者,这600位志愿者“树洞”打算用AI拯救他们
  16. 什么是 PKI? 公钥基础设施的定义和指南
  17. 10uF的电容能滤除什么频率的电源纹波?
  18. linux使用DEVICE_ATTR创建设备节点(常用)
  19. 弘辽科技:拼多多dsr是什么意思?有什么用?
  20. Android 跳转到安卓市场进行下载,跳转至应用商店下载

热门文章

  1. android12-targetsdk31报错Failed to install-write all apks
  2. c++ memset 语言_C++ memset函数
  3. python如何把八进制转换成十进制_Python练习实例82 | 八进制数如何转化为十进制数?...
  4. 网站介绍三合一缩略图片kyuan源码 可自定义增加广告位
  5. 成功解决 Failed to load ApplicationContext No qualifying bean of type 问题
  6. LESS 和 SCSS 有什么区别?
  7. 前缀、中缀、后缀表达式 快速计算方法
  8. 游戏开发物语方案点数分配_公司形象 游戏开发物语攻略怎么增加方案点数
  9. 电路设计 Altium Designer summerr
  10. IT圈的“年龄歧视”,android模拟器中文输入法