博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql的行转列(PIVOT)与列转行(UNPIVOT)
阅读量:6496 次
发布时间:2019-06-24

本文共 1792 字,大约阅读时间需要 5 分钟。

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

一、行转列

1、测试数据准备

CREATE  TABLE [StudentScores](   [UserName]         NVARCHAR(20),        --学生姓名   [Subject]          NVARCHAR(30),        --科目   [Score]            FLOAT,               --成绩)INSERT INTO [StudentScores] SELECT '张三', '语文', 80INSERT INTO [StudentScores] SELECT '张三', '数学', 90INSERT INTO [StudentScores] SELECT '张三', '英语', 70INSERT INTO [StudentScores] SELECT '张三', '生物', 85INSERT INTO [StudentScores] SELECT '李四', '语文', 80INSERT INTO [StudentScores] SELECT '李四', '数学', 92INSERT INTO [StudentScores] SELECT '李四', '英语', 76INSERT INTO [StudentScores] SELECT '李四', '生物', 88INSERT INTO [StudentScores] SELECT '码农', '语文', 60INSERT INTO [StudentScores] SELECT '码农', '数学', 82INSERT INTO [StudentScores] SELECT '码农', '英语', 96INSERT INTO [StudentScores] SELECT '码农', '生物', 78

2、行转列sql

SELECT * FROM [StudentScores] /*数据源*/AS PPIVOT (    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 ProgrectDetailSELECT 'A', 100, 200, 50, 50UNION ALLSELECT 'B', 200, 300, 150, 150UNION ALLSELECT 'C', 159, 400, 20, 320UNION ALL

2、列转行的sql

SELECT P.ProgrectName,P.Supplier,P.SupplyNumFROM (    SELECT ProgrectName, OverseaSupply, NativeSupply,           SouthSupply, NorthSupply     FROM ProgrectDetail)TUNPIVOT (    SupplyNum FOR Supplier IN    (OverseaSupply, NativeSupply, SouthSupply, NorthSupply )) P

执行结果:

转载于:https://www.cnblogs.com/linjincheng/p/9988392.html

你可能感兴趣的文章
quartz在集群环境下的最终解决方案
查看>>
为什么 JavaScript 的私有属性使用 # 符号
查看>>
mariadb 内存占用优化
查看>>
iOS 绘制圆角
查看>>
TCP安全测试指南-魔兽3找联机0day
查看>>
CocoaPods原理(一)
查看>>
又一个强大的PHP5.3依赖注入容器
查看>>
ES6常用语法
查看>>
iOS微信支付集成 SDK1 7 5
查看>>
Spring事务管理的底层逻辑—源码解析
查看>>
我理解的观察者模式
查看>>
mac下用Dosbox搭建dos下的汇编环境
查看>>
微信小程序(canvas)画图保存到本地相册(wepy)
查看>>
Android 中一些常用类的常用方法(Math、Random、Color、Paint、Canvas、Bitmap、BitmapFactory)...
查看>>
从零开始单排学设计模式「UML类图」定级赛
查看>>
机器学习:信用风险评估评分卡建模方法及原理
查看>>
MediaCodeC解码视频指定帧,迅捷、精确
查看>>
layoutSubviews 调用情况
查看>>
百度DisConf分布式配置框架源码试读(一)HttpClient 长连接
查看>>
长连接及在Node中的应用——HTTP/1.1 keep-alive
查看>>