背景说明

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 列转行相关推荐

  1. mysql 字段内部转行_mysql 列转行、列转行的有关问题_mysql

    mysql 列转行.列转行的问题 今天在逛大java吧的时候看到一个行转列.列转行的问题,看了之后还真的不知道怎么下手,可能平时用hibernate作为持久层用多了,sql语句也不会写了,赶紧去找度娘 ...

  2. mysql 列转行union all_SQL查询案例:列行转换[列转行, 使用 UNION ALL 处理]

    SQL查询案例:列行转换[列转行, 使用 UNION ALL 处理] 在行列转换的处理之后, 有时候会遇到,要列行装换的 CREATE TABLE TestColRow ( name   VARCHA ...

  3. mysql 列转行union all_SQL查询案例:列行转换[列转行, 使用 UNION ALL 处理] | 学步园...

    SQL查询案例:列行转换[列转行, 使用 UNION ALL 处理] 在行列转换的处理之后, 有时候会遇到,要列行装换的 CREATE TABLE TestColRow ( name   VARCHA ...

  4. SQL Server:使用 PIVOT 行转列和 UNPIVOT 列转行

    ylbtech-SQL Server:使用 PIVOT 行转列和 UNPIVOT 列转行 可以使用 PIVOT 和 UNPIVOT 关系运算符将表值表达式更改为另一个表.PIVOT 通过将表达式某一列 ...

  5. oracle unpivot 索引_Oracle 行转列pivot 、列转行unpivot 的Sql语句总结

    这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_user select id||username str from ap ...

  6. oracle pivot 列转行,Oracle 列转行函数pivot

    作为数据库应用开发人员,我们有很大的精力应付在处理各种各样的数据类型,展现各种维度的报表上面. [url=]行转列[/url].列转行是我们经常会遇到的"诡异"需求.标准SQL没有 ...

  7. unpivot行转列 oracle,Oracle列转行_unpivot

    Oracle列转行_unpivot 在实际业务开发环境中,我们经常会遇到要对查询的数据集进行列转行的需求.那么Oracle是如何实现的呢?本文也将通过几个实例来详细讲解一下. Oracle列转行 Or ...

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

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

  9. Mysql学习——行与列的多种转换

    目录 一.行转列 二.列转行 三.多列转一行 四.一行转多列 五.行转列的其案例 首先准备一张表 CREATE TABLE CJ (Name varchar(32),Subject varchar(3 ...

最新文章

  1. map评价吗 voc数据集可以用coco_【庖丁解牛】从零实现RetinaNet(九):使用COCO预训练权重在VOC上训练RetinaNet...
  2. linux下mysql源码安装
  3. 临渊羡鱼,不如退而结网
  4. 多种方法教你破解电信共享上网的限制
  5. [CQOI2012]模拟工厂 题解(搜索+贪心)
  6. 搜狐视频怎么开启自动连播
  7. Java 文件目录显示
  8. 经典算法研究系列:七、深入浅出遗传算法,透析GA本质【转载】
  9. 你需要明白的SQL SERVER书签查找(Bookmark Lookup)
  10. Ubuntu20.04成功安装google浏览器,并正常使用Bing等其他搜索引擎
  11. 有证无车的程序猿如何查询档案编号、添加电子驾驶证(支付宝、微信)
  12. tibco rv java实例_Tibco介绍及应用.pptx
  13. CleanMyMac2023免费版系统清理优化工具
  14. matlab画sinc函数及其有意思的性质
  15. 小程序引导用户下载APP
  16. Backtrader获得当前持仓详情——持仓数量与持仓的名称
  17. 用 XGBoost 在 Python 中进行特征重要性分析和特征选择
  18. OpenCv初学者学习笔记(一):图像视频的加载与显示
  19. js数据过滤算法搭建
  20. 如何排查网络丢包问题

热门文章

  1. 普元信息笔试java
  2. 怎么测试linux丢包率,linux上测试丢包率的工具iperf介绍
  3. 腾讯云服务器如何使用root账号登录,不能使用root登录怎么办
  4. 5月2日,今日信息差
  5. mysql qps_关于mysql5.7的160万qps
  6. php正则分隔符,笔记014 PHP正则表达式的分隔符
  7. 点云数据处理 | 轨道交通线路自动提取来了!
  8. opencv画火车沿轨道运行-课程作业
  9. 基于51单片机的简易电子数字计算器Proteus仿真
  10. c语言刷题系列(三)