在做数据统计的时候,行转列,列转行是经常碰到的问题。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, NorthSupplyFROM ProgrectDetail
)T
UNPIVOT
(SupplyNum FOR Supplier IN(OverseaSupply, NativeSupply, SouthSupply, NorthSupply )
) P

执行结果:

以上转载于:https://www.cnblogs.com/linJie1930906722/p/6036714.html。

亲测有效,超级棒,以下是我的练习

3、数据库为SQLServer

源数据为:

列传行:

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. Oracle 行转列pivot 、列转行unpivot 的Sql语句总结

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

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

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

  4. mysql unpivot_SQL行转列(PIVOT)与列转行(UNPIVOT)简明方法

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

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

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

  6. 做图表统计你需要掌握SQL Server 行转列和列转行

    原文:做图表统计你需要掌握SQL Server 行转列和列转行 说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需 ...

  7. oracle 行转列sql语句,行转列(sql行转列)

    sql语句行转列?怎么转啊 select MIN(id) as ID, name, sex, sum(case when num=2 then 2 end) as num2, sum(case whe ...

  8. 多列转多行sql oracle,sql多行转多列,中文没办法聚集的有关问题

    sql多行转多列,中文没办法聚集的问题? 我要将下表 选项      答案       姓名 爱好      篮球       bruce 年龄      28        bruce 性别     ...

  9. SQL Server 行转列

    SQL Server 行转列 继上次的列转行需求之后,最近又遇到一个行转列的需求.因为表设计的时候考虑到可能存在多类型的数据,但是其实最后使用只有固定的几种,所以前端界面也都是固定的.所以这个时候改表 ...

最新文章

  1. Java实现HTTP文件下载(转)
  2. String 转 const char*
  3. 用碧海潮声制作的宋体(雅黑宋体)替换Windows7原生的火柴棍式的宋体
  4. restful服务端客户端_测试RESTful服务的客户端
  5. 研讨会 | “人工智能与行业知识图谱技术实战”研讨会
  6. tomcat最新版本是多少_Tomcat在Windows 10下的安装配置教程
  7. Git——添加文件【git add / git commit】
  8. linux gnu ld,GNU LD用法
  9. 智能语音电话机器人源码部署
  10. 使用bat一键生成bmfont艺术字
  11. 让惊艳无处不在 Win7桌面便签操作技巧
  12. 人工智能机器学习Java也可以
  13. 图层蒙版和图层剪贴路径_PS蒙版使用教程、快速蒙版、剪切蒙版、矢量蒙版、图层蒙版要点...
  14. html 文字竖着排引号,文字竖排演示
  15. 极限中0除以常数_考研数学极限重难点讲解003期【无穷小量和无穷大量】
  16. Android开发辅助工具类 Utils 汇总
  17. 程序员的呐喊--读书感悟
  18. pixel手机升系统
  19. 华为任正非老爷子的一番话,听得我不寒而栗
  20. 电脑文件夹删除不了的解决办法

热门文章

  1. 26.微信小程序(WeUI框架)
  2. 微信公众平台服务号如何申请
  3. 叠加三角形的绘制,使用turtle库中的turtle.fd()函数和turtle.seth()函数绘制一个叠加等边三角形
  4. 中国风水墨风廉洁公正行政汇报PPT模板
  5. 人工智能实验:动物识别系统(C++代码实现)
  6. 珠海维修安川服务器,珠海市安川焊接机器人维保中心
  7. NSGA II实例讲解
  8. HttpServletRequest、ServerHttpRequest获取访问者真实IP,并设置ip白名单
  9. 处理VR透镜畸变的三种方法
  10. 基于Jsp和Servlet的简单项目