SqlServer中行转列的PIVOT函数
Oracle部分:
行专列pivot:
SELECT * FROM [StudentScores] /*数据源*/
AS P
PIVOT
(SUM(Score/*行转列后 列的值*/) FOR p.Subject/*需要行转列的列*/ IN ([语文],[数学],[英语],[生物]/*列的值*/)
) AS T
ps:注意第一行“select * “”中的 * 号 不能换成列名
unpivot:
转换前:
month1 | month2 | month3 | month4 |
12 | 13 | 14 | 15 |
SELECT P.num,P.month
FROM
(SELECT month1, month2, month3,month4FROM ProgrectDetail
)T
UNPIVOT
(Num FOR month IN(month1 as '1月', month2 as '2月', month3 as '3月', month4 as '4月' )
) P
转换后效果:
month | num |
1月 | 12 |
2月 | 13 |
3月 | 14 |
4月 | 15 |
sqlserver:
PIVOT函数中必须要包含一个聚合函数,聚合函数分别是:COUNT、SUM、MAX、MIN、AVG,针对不同的使用场景,该选择哪个聚合函数,意义都是不一样的,下面还是举例说明吧!
我建了如下一张销售表并且插入一下测试值:
[sql] view plain copy
- CREATE TABLE SalesOrder
- (
- 门店 VARCHAR(50),
- 商品类型 VARCHAR(50),
- 销售额 INT
- )
- INSERT INTO SalesOrder
- SELECT 'ShopA','A',round(100+100*rand(),0) UNION ALL
- SELECT 'ShopA','A',round(100+100*rand(),0) UNION ALL
- SELECT 'ShopA','B',round(200+100*rand(),0) UNION ALL
- SELECT 'ShopA','B',round(200+100*rand(),0) UNION ALL
- SELECT 'ShopA','B',round(200+100*rand(),0) UNION ALL
- SELECT 'ShopA','C',round(1000+100*rand(),0)UNION ALL
- SELECT 'ShopB','A',round(100+100*rand(),0) UNION ALL
- SELECT 'ShopB','A',round(100+100*rand(),0) UNION ALL
- SELECT 'ShopB','B',round(200+100*rand(),0) UNION ALL
- SELECT 'ShopB','C',round(1000+100*rand(),0)UNION ALL
- SELECT 'ShopB','C',round(1000+100*rand(),0)UNION ALL
- SELECT 'ShopC','A',round(100+100*rand(),0) UNION ALL
- SELECT 'ShopC','B',round(200+100*rand(),0) UNION ALL
- SELECT 'ShopC','B',round(200+100*rand(),0) UNION ALL
- SELECT 'ShopC','B',round(200+100*rand(),0) UNION ALL
- SELECT 'ShopC','B',round(200+100*rand(),0) UNION ALL
- SELECT 'ShopC','C',round(1000+100*rand(),0)UNION ALL
- SELECT 'ShopC','C',round(1000+100*rand(),0)
下面我要在PIVOT行转列函数中,使用不同的聚合函数,更直观的统计各个“门店”以及各个”商品类型“的销售情况:
1.SUM:
[sql] view plain copy
- SELECT * FROM SalesOrder
- PIVOT(SUM(销售额) FOR 商品类型 IN(A,B,C)) AS PVT
统计的是各个门店,各个商品类型的总的销售额。
2.COUNT:
[sql] view plain copy
- SELECT * FROM SalesOrder
- PIVOT(COUNT(销售额) FOR 商品类型 IN(A,B,C)) AS PVT
统计的是各个门店,各个商品类型的销售量。
3.MAX:
[sql] view plain copy
- SELECT * FROM SalesOrder
- PIVOT(MAX(销售额) FOR 商品类型 IN(A,B,C)) AS PVT
统计的是各个门店,各个商品类型卖得最贵的销售额。
4.MIN:
[sql] view plain copy
- SELECT * FROM SalesOrder
- PIVOT(MIN(销售额) FOR 商品类型 IN(A,B,C)) AS PVT
和MAX相反,统计的是最便宜的销售额
5.AVG
[sql] view plain copy
- SELECT * FROM SalesOrder
- PIVOT(AVG(销售额) FOR 商品类型 IN(A,B,C)) AS PVT
统计的是各个门店,各个商品类型的销售额的平均值
SqlServer中行转列的PIVOT函数相关推荐
- Oracle SQL 行转列,pivot函数和unpivot函数
转:Oracle行转列,pivot函数和unpivot函数 - waynelo - 博客园 (cnblogs.com) pivot函数:行转列函数: 语法:pivot(任一聚合函数 for 需专列的值 ...
- oracle pivot函数 后求和,Oracle行转列,pivot函数和unpivot函数
pivot函数:行转列函数: 语法:pivot(任一聚合函数 for 需专列的值所在列名 in (需转为列名的值)): unpivot函数:列转行函数: 语法:unpivot(新增值所在列的列名 fo ...
- Oracle行转列,pivot函数和unpivot函数-配合动态sql很有用
pivot函数:行转列函数: 语法:pivot(任一聚合函数 for 需专列的值所在列名 in (需转为列名的值)): unpivot函数:列转行函数: 语法:unpivot(新增值所在列的列名 fo ...
- oracle行转列和sqlserver行转列语法分析比对
前言 最近遇到一些老项目,在实施过程中需要切换数据库,遇到了好几处行转列的语法,在网上找了一些资料后,都不能很好的解释分析,下面我将个人在工作中遇到的一些问题以及解决方案详细的描述记录下来,如果有遇到 ...
- oracle 总转横函数,详解Oracle行列转换函数-pivot函数和unpivot函数-多智时代
今天主要介绍一下Oracle行转列及列转行常见函数,下面一起来看看吧! 行列转换 pivot函数:行转列函数 语法:pivot(任一聚合函数 for 需专列的值所在列名 in (需转为列名的值)): ...
- SqlServer列转行查询--Pivot函数
下面来说说SQLServer 中常用Pivot 函数(这里是用的数据库是SQLSERVER,与其他数据库是类似的,大家放心看就好) 让我们先从一个虚构的场景中来着手吧 万国来朝,很多供应商每天都汇报各 ...
- pivot sqlserver 条件_SqlServer PIVOT函数快速实现行转列,UNPIVOT实现列转行
PIVOT函数,行转列 PIVOT函数的格式如下 PIVOT(([聚合列值]) FOR [行转列前的列名] IN([行转列后的列名1],[行转列后的列名2],[行转列后的列名3],.......[行转 ...
- mysql行转列函数_一个小知识点-Hive行转列实现Pivot
前言 传统关系型数据库中,无论是Oracle(11g之后)还是SQLserver(2005之后),都自带了Pivot函数实现行转列功能,本文主要讲述在Hive中实现行转列的两种方式. 传统数据库方式 ...
- mysql行转列sql函数_SQL之行转列Pivot函数
未来的一个月时间中,会总结一系列SQL知识点,一次只总结一个知识点,尽量说明白,下面来说说SQL 中常用Pivot 函数(这里是用的数据库是SQLSERVER,与其他数据库是类似的,大家放心看就好) ...
最新文章
- 【Qt】Log4Qt(二)使用
- 吴恩达新书《Machine Learning Yearning》中7个实用建议(附论文)
- 「干货」谷歌大脑:元学习最新进展与挑战(40 PPT下载)
- View4.5测试参考文档7--View Administrator安装、配置、创建桌面池
- 从脸部识别到火星机器人,正在改变世界的计算机视觉
- iris流程图_如何搭建一个简单的机器学习流水线?
- PHP中的static静态变量的使用方法详解
- 用设计模式去掉没必要的状态变量 —— 状态模式
- 剑指offer刷题(java)|二维数组中的查找|替换空格|leetcode刷题
- 图片不显示问题 图片url监测改变问题
- 分布式锁的几种实现方式~
- XNA中的中文输入(一)
- linux 查看端口占用命令 亲测可用
- 当游戏遇到区块链之链游经济系统思考
- linux b类地址设24位掩码,子网掩码的设置方法和作用
- win7休眠设置在哪里_电脑休眠好不好,在哪里开启?
- EasyAR 插件使用简介
- shineblink HC-SR505人体红外感应传感器
- Caj转pdf有哪些不收费的转换方法?
- 第二十四章 面向对象------属性
热门文章
- 高校学院计算机实验室管理系统概述,院实验中心-北京邮电大学 计算机学院(国家示范性软件学院)...
- photoshop文件巨大_如何手动清除Photoshop的大量临时文件
- python在windows的cmd中打印彩色文字
- 如何为你的测试环境添加假数据
- Python 在图片上画点、圆和矩形实例
- “不专业”的你怎么学习平面设计原理
- 银联支付(WAP支付)
- 一键登录 助燃激情赛事
- C++:函数对象(函数符)
- 基于Hadoop的豆瓣电影的数据抓取、数据清洗、大数据分析(hdfs、flume、hive、mysql等)、大屏可视化