mysql unpivot_SQL(横表和纵表)行列转换,PIVOT与UNPIVOT的区别和使用方法举例,合并列的例子...
使用过SQL Server 2000的人都知道,要想实现行列转换,必须综合利用聚合函数和动态SQL,具体实现起来需要一定的技巧,而在SQL Server 2005中,使用新引进的关键字PIVOT/UNPIVOT,则可以很容易的实现行列转换的需求。
在本文中我们将通过两个简单的例子详细讲解PIVOT和UNPIVOT的用法。
PIVOT是行转列,用法如下:
假如表结构如下:
id name quarter profile
1 a 1 1000
1 a 2 2000
1 a 3 4000
1 a 4 5000
2 b 1 3000
2 b 2 3500
2 b 3 4200
2 b 4 5500
----------------------------------------------
使用PIVOT将四个季度的利润转换成横向显示:
select id,name,
[1] as "一季度",[2] as "二季度",[3] as "三季度",[4] as "四季度"
from test
pivot
(
sum(profile)
for quarter in ([1],[2],[3],[4])
)
as pvt
-----------------------------------------------
得出的结果如下:
id name 一季度 二季度 三季度 四季度
1 a 1000 2000 4000 5000
2 b 3000 3500 4200 5500
========================================================================================
UNPIVOT是列转行,用法如下:
假如表结构如下:
id name Q1 Q2 Q3 Q4
1 a 1000 2000 4000 5000
2 b 3000 3500 4200 5500
-----------------------------------------------
使用UNPIVOT,将同一行中四个季度的列数据转换成四行数据:
select id,name,quarter,profile
from test
unpivot
(
profile
for quarter in ([Q1],[Q2],[Q3],[Q4])
)
as unpvt
-----------------------------------------------
得出的结果如下:
id name quarter profile
1 a Q1 1000
1 a Q2 2000
1 a Q3 4000
1 a Q4 5000
2 b Q1 3000
2 b Q2 3500
2 b Q3 4200
2 b Q4 5500
------------------------------------------------------------------------------
设存在如下纵向表,第一列为id(可能是某个业务数据的id),第二列为类型,第三列为类型对应的值,如下图:
如上表,存在2,3,4三种类型,其中业务数据ID为1的三种类型都有值,业务数据ID为2的三种类型都有值,业务数据ID为3的只有类型2和3有值,现在要把纵向表横过来显示,可以采用如下代码:
-- =========================================================
-- 纵向表变横向表:
-- 1. 转换类型,类型的值必须是整数,且不等于0,即0没有意义,0可以表示为空
-- =========================================================
SELECT
t.id,
SUM(DECODE(t.code, 2, 2, 0)) "第二项", -- 如果该行类型为2则就是2,其它的都为0
SUM(DECODE(t.code, 3, 3, 0)) "第三项",
SUM(decode(t.code, 4, 4, 0)) "第四项"
FROM ttt t WHERE t.id=1 GROUP BY t.id;
-- =========================================================
-- 纵向表变横向表:
-- 1. 转换类型对应的数据,且数据需要是数值,且0没有意义,即0可以表示为空
-- =========================================================
SELECT
t.id,
SUM(DECODE(t.code, 2, t.val, 0)) "第二项", -- 如果该行类型为2则显示2类型对应的值DECODE,否则都显示0
SUM(DECODE(t.code, 3, t.val, 0)) "第三项",
SUM(DECODE(t.code, 4, t.val, 0)) "第四项"
FROM ttt t GROUP BY t.id;
----------------------------------------------------------------------------------------------------------------------------------------
oracle合并列的函数wm_concat的使用详解
oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oracle wm_concat(column)函数实现字段合并,如果您对oracle wm_concat(column)函数使用方面感兴趣的话,不妨一看。
shopping:-----------------------------------------
u_id goods num
------------------------------------------
1 苹果 2
2 梨子 5
1 西瓜 4
3 葡萄 1
3 香蕉 1
1 橘子 3
=======================
想要的结果为:--------------------------------
u_id goods_sum
____________________
1 苹果,西瓜,橘子
2 梨子
3 葡萄,香蕉
---------------------------------
1.select u_id, wmsys.wm_concat(goods) goods_sum 2. 3.from shopping 4. 5.group by u_id
想要的结果2:
--------------------------------
u_id goods_sum
____________________
1 苹果(2斤),西瓜(4斤),橘子(3斤)
2 梨子(5斤)
3 葡萄(1斤),香蕉(1斤)
---------------------------------
使用oracle wm_concat(column)函数实现:select u_id, wmsys.wm_concat(goods || '(' || num || '斤)' ) goods_sum
from shopping
group by u_id
mysql---group_concat
mysql unpivot_SQL(横表和纵表)行列转换,PIVOT与UNPIVOT的区别和使用方法举例,合并列的例子...相关推荐
- 数据透视表与mysql_通过sql做数据透视表,数据库表行列转换(pivot和Unpivot用法)(一)...
在mssql中大家都知道可以使用pivot来统计数据,实现像excel的透视表功能 一.MSsqlserver中我们通常的用法 1.Sqlserver数据库测试 ---创建测试表 Create tab ...
- oracle 总转横函数,详解Oracle行列转换函数-pivot函数和unpivot函数-多智时代
今天主要介绍一下Oracle行转列及列转行常见函数,下面一起来看看吧! 行列转换 pivot函数:行转列函数 语法:pivot(任一聚合函数 for 需专列的值所在列名 in (需转为列名的值)): ...
- SQL Server中行列转换 Pivot UnPivot (转载)
SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现PIVOT的一般语法是:PIV ...
- 数据透视表sql:用SQL行列转换实现数据透视的一些思考
用SQL行列转换实现数据透视的一些思考 摘要:根据对报表开发过程中碰到的需要用SQL行列转换进行解决的一类查询统计问题的分析,逐步探索求解得到一种较通用的解决思路,并用函数进行实现.该解决思路及函数实 ...
- mysql行转列transform_MySQL学习之行列转换案例
前言 Oracle中的pivot/unpivot函数可以很方便的帮助我们实现行列转换,但是MySQL并不支持. 可以在SQL上想办法,比如pivot考虑用聚合函数+case when, unpiovt ...
- isnull pivot server sql_SQLServer行列转换 Pivot UnPivot
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (-) )AS P ...
- 【转】SQL Server中行列转换 Pivot UnPivot
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (-) )AS P ...
- SQL Server中行列转换 Pivot UnPivot
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (-) )AS P ...
- pivot for oracle,Oracle 11g 行列互换 pivot 和 unpivot 说明
针对Oracle 11g 之前版本的行列转换,之前整理过一篇文档: 在Oracle 11g中,Oracle 又增加了2个查询:pivot 和 unpivot. pivot:行转列 unpivot:列转 ...
最新文章
- 【原创】多台电脑如何公用一个键盘鼠标进行操作 - Mouse with Borders 软件
- Python 装饰器原理和基本实现
- openjdk-7支持版本_长期支持对OpenJDK意味着什么?
- 注解和反射实现dao层增删改查
- 【转】TLB(Translation Lookaside Buffers,TLB)的作用
- 【CMAKE系列】cmake中CMakeLists.txt脚本的常用语法
- python浮雕图片_python图像数据增强——imgaug (二)
- centos配置ssh免密码登录
- 消息队列控制灯代码_基于ARM的智能灯光控制系统经验总结分享
- ReentrantReadWriteLock源码解读
- 游戏必要的清屏实现以及闪烁原因的详细解释
- android timepicker 固定样式,android-如何设置格式为24h的TimePicker显示
- 系统集成---合同法、著作权法、招标投标实施条例+政府采购法实施条例
- windows+Texstudio+languagetool修改语法错误
- delphi 企业微信消息机器人_GitHub - guoxianlong/insight: Insight是一个可以管理企业微信群机器人的小工具,可以非常方便的往群里发布即时消息和定时消息。...
- Sci-Hub丨科研文献实时更新
- 漫谈OCL概念、特征和实践(作者:大雁北飞)
- 可跨页字符串:使用Spans设置文本样式
- 用纯css模拟下雪的效果
- 基于微信小程序云开发实现的婚礼邀请函模板,可以自行定制开发
热门文章
- 洛谷P5082 成绩解题思路及题解
- target.ID 和 source.ID 的属性冲突: DataType 属性不匹配
- Macbook prom1+android虚拟机+pycharm+pytest+appium 实现微信登录
- 如何查看文章所投期刊属于科睿唯安(Clarivate Analytics)分区的几区?
- 哈佛成功金句-----25则
- 星巴克中国内地首家共享空间概念店上海开业;加拿大鹅将在哈尔滨南京宁波等地新设门店 | 美通社头条...
- 【Dart 教程系列第 49 篇】Dart 是值传递还是引用传递
- 戒骄戒躁,淘来檄文三篇
- 视觉显著性分析【1】
- mysql表多大的时候需要分区_数据库分区表 什么情况下需要分区