mysql 列转行 unpivot_Unpivot 列转行
背景说明
Oracle中UNPIVOT语法:SELECT ...
FROM ...
UNPIVOT [INCLUDE|EXCLUDE NULLS]
(unpivot_clause
unpivot_for_clause
unpivot_in_clause )
WHERE ...
示例如下:SQL> SELECT *
2 FROM pivoted_data
3 UNPIVOT (
4 deptsal --
5 FOR saldesc --
6 IN (d10_sal, d20_sal, d30_sal, d40_sal) --
7 );
JOB SALDESC DEPTSAL
---------- ---------- ----------
CLERK D10_SAL 1430
CLERK D20_SAL 2090
CLERK D30_SAL 1045
SALESMAN D30_SAL 6160
PRESIDENT D10_SAL 5500
MANAGER D10_SAL 2695
MANAGER D20_SAL 3272.5
MANAGER D30_SAL 3135
ANALYST D20_SAL 6600
解决方案
您可以在Polardb-O中使用Crosstab函数接口进行行列转换。
示例
转行示例如下:with a as ( -- A对应原始数据(即需要列转行的数据)
select
js->>'seller' as seller,
js->>'se_year' as se_year,
jan ,
feb ,
mar ,
apr ,
may ,
jun ,
jul ,
aug ,
sep ,
oct ,
nov ,
dec
from crosstab(
-- 这个是需要进行行列变换的数据源。
-- 排序字段为group by字段,最后一个字段为转换后的内容字段,导数第二个字段为行列变换的字段(内容为枚举,比如月份)
-- (必须在下一个参数中提取出对应的所有枚举值)
$$select jsonb_build_object('seller', seller, 'se_year', se_year) as js, se_month, sum(se_amount) from tbl_sellers_info group by 1,2 order by 1$$,
-- 行列转换的行,有哪些值被提取出来作为列。 这个在这里代表的是月份,也就是se_month的值
-- 或(select * from (values('jan'),...('dec')) t(se_month))
'select distinct se_month from tbl_sellers_info order by 1'
)
as -- crosstab 输出格式
( js jsonb, -- 第一个参数SQL内对应的order by对应的字段(1个或多个)
Jan numeric, -- 第一个参数SQL内对应导数第二个字段的枚举值,(行转列)
feb numeric, -- ...同上
mar numeric,
apr numeric,
may numeric,
jun numeric,
jul numeric,
aug numeric,
sep numeric,
oct numeric,
nov numeric,
dec numeric
)
order by 1,2
)
,
-- b , 用jsonb把多列合并为一列,并使用jsonb_each展开。
b as (select seller, se_year, jsonb_each(row_to_json(a)::jsonb-'seller'::text-'se_year'::text) as rec from a)
select seller, se_year, (b.rec).key as month, (b.rec).value as sum from b;
mysql 列转行 unpivot_Unpivot 列转行相关推荐
- mysql 字段内部转行_mysql 列转行、列转行的有关问题_mysql
mysql 列转行.列转行的问题 今天在逛大java吧的时候看到一个行转列.列转行的问题,看了之后还真的不知道怎么下手,可能平时用hibernate作为持久层用多了,sql语句也不会写了,赶紧去找度娘 ...
- mysql 列转行union all_SQL查询案例:列行转换[列转行, 使用 UNION ALL 处理]
SQL查询案例:列行转换[列转行, 使用 UNION ALL 处理] 在行列转换的处理之后, 有时候会遇到,要列行装换的 CREATE TABLE TestColRow ( name VARCHA ...
- mysql 列转行union all_SQL查询案例:列行转换[列转行, 使用 UNION ALL 处理] | 学步园...
SQL查询案例:列行转换[列转行, 使用 UNION ALL 处理] 在行列转换的处理之后, 有时候会遇到,要列行装换的 CREATE TABLE TestColRow ( name VARCHA ...
- SQL Server:使用 PIVOT 行转列和 UNPIVOT 列转行
ylbtech-SQL Server:使用 PIVOT 行转列和 UNPIVOT 列转行 可以使用 PIVOT 和 UNPIVOT 关系运算符将表值表达式更改为另一个表.PIVOT 通过将表达式某一列 ...
- oracle unpivot 索引_Oracle 行转列pivot 、列转行unpivot 的Sql语句总结
这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_user select id||username str from ap ...
- oracle pivot 列转行,Oracle 列转行函数pivot
作为数据库应用开发人员,我们有很大的精力应付在处理各种各样的数据类型,展现各种维度的报表上面. [url=]行转列[/url].列转行是我们经常会遇到的"诡异"需求.标准SQL没有 ...
- unpivot行转列 oracle,Oracle列转行_unpivot
Oracle列转行_unpivot 在实际业务开发环境中,我们经常会遇到要对查询的数据集进行列转行的需求.那么Oracle是如何实现的呢?本文也将通过几个实例来详细讲解一下. Oracle列转行 Or ...
- unpivot用法 oracle10g,Oracle 行转列pivot 、列转行unpivot 的Sql语句总结(转)
多行转字符串 这个比较简单,用||或concat函数可以实现 1 select concat(id,username) str from app_user 2 3 select id||usernam ...
- Mysql学习——行与列的多种转换
目录 一.行转列 二.列转行 三.多列转一行 四.一行转多列 五.行转列的其案例 首先准备一张表 CREATE TABLE CJ (Name varchar(32),Subject varchar(3 ...
最新文章
- 以使用QSqlQuery向数据库中插入数据为例,做一个小结
- python培训班哪些比较好-在线Python编程培训哪家机构比较好?
- tomcat https 配置
- tp5循环查询语句_tp5 foreach 套循环的优化(就是foreach 里边再查表)
- MATLAB怎么表示均布荷载,MATLAB平面四节点等参元分析程序说明
- 从《英雄联盟》的装备系统谈玩家行为与游戏设计
- 在linux安装光盘启动不了,linux光盘启动
- 使用PostgREST的RestAPI操作之管理与优化
- 航行金税盘_通过陌生事物的情感进行统计好奇心航行
- 微软再次“封杀” Flash Player!
- 【Java】0X002 Hello World
- 怎么将表中的空格都转变为0???
- Dell Precision M4800 AppleALC声卡驱动修复教程
- 计算机考研复试面试常问问题 数据结构篇(上)
- Git查询一定时间范围团队代码提交日志
- 利用Get-FileHash工具进行哈希验证
- 等差数列和等比数列公式
- STM32F简单应用
- c语言的一颗会变色的圣诞树
- 网站搭建的理解与流程
热门文章
- 机器学习笔记4-sklearn决策树(上)
- 低效能人士的 7 个习惯
- Angular toastr提示框
- JVM虚拟机,也就那么回事!(总结+绘图+流程+代码)
- python 设置全局代理_Python中使用socks5设置全局代理的方法示例
- ReactDom is not defined
- 【项目】—— 语音小管家Sosuke
- linux根分区找不到大文件
- oracle nvl函数3个参数,oracle中的函数介绍(一):nvl函数、decode函数、case when函数、sum函数...
- android删除数据库方法,Android删除SQL数据库