返回顶部
首页 > 资讯 > 数据库 >Oracle——行转列与列转行
  • 737
分享到

Oracle——行转列与列转行

oracle数据库mysql 2023-09-02 12:09:29 737人浏览 八月长安
摘要

文章目录 行转列创建表和增加测试数据方式一:先分组,再统计平铺方式二:使用Oracle11g自带函数PIVOT实现 列转行创建表和增加测试数据方式一:union all 单个合并

文章目录

行转列

把某一个字段的值作为唯一值,然后另外一个字段的行值转换成它的列值

转换过程大致如下所示:
在这里插入图片描述
通常情况下,采取group by 唯一字段进行分组,然后依据不同的列进行判断输出就能转换。

创建表和增加测试数据

建表语句和增加测试数据sql如下所示:

create table XJ_TEST_LtoH(      stuid varchar(20),      stuname varchar(40),      coursename varchar(40),      score int);insert into XJ_TEST_LtoH(stuid,Stuname,coursename,score)values('sc202201001','张三','数学',40);insert into XJ_TEST_LtoH(stuid,Stuname,coursename,score)values('sc202201001','张三','语文',50);insert into XJ_TEST_LtoH(stuid,Stuname,coursename,score)values('sc202201001','张三','理综',120);insert into XJ_TEST_LtoH(stuid,Stuname,coursename,score)values('sc202201011','李四','数学',32);insert into XJ_TEST_LtoH(stuid,Stuname,coursename,score)values('sc202201011','李四','语文',45);insert into XJ_TEST_LtoH(stuid,Stuname,coursename,score)values('sc202201011','李四','理综',123);insert into XJ_TEST_LtoH(stuid,Stuname,coursename,score)values('sc202201031','王五','数学',54);insert into XJ_TEST_LtoH(stuid,Stuname,coursename,score)values('sc202201031','王五','语文',56);insert into XJ_TEST_LtoH(stuid,Stuname,coursename,score)values('sc202201031','王五','理综',100);

执行完毕后,数据库中当前的数据结构如下:
在这里插入图片描述

同所属的类,对应不同的值,采取不同列进行存储。

方式一:先分组,再统计平铺

将数据根据学员名分组,将学科成绩平铺展示。sql如下所示:

-- 方式一:先分组,再单元拆分select t.stuid,t.stuname ,sum(decode(t.coursename,'数学',t.score,0)) "数学",sum(decode(t.coursename,'语文',t.score,0)) "语文",sum(decode(t.coursename,'理综',t.score,0)) "理综"from XJ_TEST_LtoH t group by t.stuname,t.stuid;

在这里插入图片描述

方式二:使用oracle11g自带函数PIVOT实现

Oracle11g及以后自带函数PIVOT就能实现上述的效果,且代码量很小。

select * fromPIVOT (sum(xxx ) for XXX    in(mm,nn) )

具体的使用方式,如下:

-- 方式二:Oracle11g之后提供了自带函数PIVOTselect * from XJ_TEST_LtoH pivot (      sum(score )       for      coursename        in('语文' as 语文,'数学' as 数学,'理综' as 理综) );

在这里插入图片描述

列转行

把一行当中的列的字段按照行的唯一值转换成多行数据。

还是上面的栗子,先创建测试表和增加测试数据。

创建表和增加测试数据

------ 列转行前的表创建create table XJ_TEST_HL as (select t.stuid,t.stuname ,sum(decode(t.coursename,'数学',t.score,0)) "数学",sum(decode(t.coursename,'语文',t.score,0)) "语文",sum(decode(t.coursename,'理综',t.score,0)) "理综"from XJ_TEST_LtoH t group by t.stuname,t.stuid);

这种语法,就能直接将查询到的数据信息,以及表结构中字段类型等信息,映射成一张新的表。

此时的数据结构如下所示:
在这里插入图片描述

方式一:uNIOn all 单个合并

查询每个需要拆分的列数据信息,以相同的列名接收,再将数据合并。

-- 方式一:先查询单个,再将所有数据拼接select * from (select t.stuid,t.stuname,'语文' as coursename,t.语文 as score from XJ_TEST_HL tunion allselect t.stuid,t.stuname,'数学' as coursename,t.数学 as score from XJ_TEST_HL tunion allselect t.stuid,t.stuname,'理综' as coursename,t.理综 as score from XJ_TEST_HL t) p order by p.stuname;

在这里插入图片描述

方式二:unpivot 函数实现

语法如下所示:

select 字段 from 数据集unpivot(自定义列名 for 自定义列名 in(列名))

【注意】这里的是 unpivot ,不是 pivot !

-- 方式二-- 语法  select 字段 from 数据集 unpivot(自定义列名 for 自定义列名 in(列名))select * from XJ_TEST_HLunpivot (score for coursename in(语文,数学,理综));

在这里插入图片描述

总结

pivotunpivot不太好理解,并且属于oracle特有,针对别的类型数据库,可能方式一更好点。

资料参考

oracle怎么实现行列转换

来源地址:https://blog.csdn.net/qq_38322527/article/details/127445099

您可能感兴趣的文档:

--结束END--

本文标题: Oracle——行转列与列转行

本文链接: https://lsjlt.com/news/390792.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Oracle——行转列与列转行
    文章目录 行转列创建表和增加测试数据方式一:先分组,再统计平铺方式二:使用Oracle11g自带函数PIVOT实现 列转行创建表和增加测试数据方式一:union all 单个合并...
    99+
    2023-09-02
    oracle 数据库 mysql
  • SQL行转列与列转行详情
    1.数据集 +---+----------+ |id |login_date| +---+----------+ |01 |2021-02-28| |01 |2021-03-01| ...
    99+
    2024-04-02
  • oracle 行转列
     Create   table   test   (name   char(10),km   char(10),cj &nbs...
    99+
    2024-04-02
  • SQL行转列与列转行的方法
    本文小编为大家详细介绍“SQL行转列与列转行的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL行转列与列转行的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。数据集+---+----------+|i...
    99+
    2023-06-29
  • postgresql行转列与列转行图文教程
    目录列转行行转列总结列转行 PostgreSQL列转行的思路主要是利用string_to_array进行数组转换,然后用unnest进行行拆分 select t.bid_unit,unit_id from u...
    99+
    2023-06-11
    postgresql行转列 postgresql列转行
  • oracle行列转换
    第一种是利用的decode,很普通的一种写法:select sname,sum(decode(course,'语文',score,0)) "语文",sum(decode(course,'数学',s...
    99+
    2024-04-02
  • DB2 行列转置之行转列
    构造表和数据 CREATE TABLE Sales(Year INTEGER,Quarter INTEGER,Results INTEGER); insert into sales values(2005,...
    99+
    2024-04-02
  • sql行转列、列转行的方法
      如题:有一张表EMP,里面有两个字段:name,chengji  有三条记录,分别表示语文(name) 70分,数学(name) 80分,英语(name) 58分,请用一条...
    99+
    2024-04-02
  • oracle中多列转行
    方式一 : 通过wm_concat函数,该函数在10g可以使用,11g 中不兼容,12g中去掉了该函数, ,返回类型为varchar      &nb...
    99+
    2024-04-02
  • 学习mysql 如何行转列与列传行
    目录一、行转列—case+groupby二、列转行——union一、行转列— case+group by mysql>...
    99+
    2024-04-02
  • SQL如何实现行转列和列转行
    这篇文章给大家分享的是有关SQL如何实现行转列和列转行的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。行列互转,是一个经常遇到的需求。实现的方法,有case when方式和2005...
    99+
    2024-04-02
  • mysql 列转行
    一、列转行 mysql 数据库中,我们可能遇到将数据库中某一列的数据(多个值,按照英文逗号分隔),转化为多行数据(即一行转多行),然后join关联表,再转化为一行数据 如:有两张表,一用户表,一张学科表,需要查询学科表中的用户姓名 用...
    99+
    2023-08-31
    mysql 数据库 sql
  • mysql 行转列
    以下是其中比较常见的几种方法: 使用GROUP_CONCAT函数 可以使用GROUP_CONCAT函数将多行数据合并为一行,并以逗号或其他分隔符进行分隔。通过SELECT语句和GROUP BY子句,可以将数据行转换为列。具体语法如下...
    99+
    2023-08-20
    mysql 数据库 sql
  • DB2行列转置的行转列是怎样的
    DB2行列转置的行转列是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。建表,并insert 2行数据CREATE TABLE Sales...
    99+
    2024-04-02
  • 怎么在SQL中实现行转列和列转行
    怎么在SQL中实现行转列和列转行?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。行列转换就是如下图所示两种展示形式的互相转换行转列假如我们有...
    99+
    2024-04-02
  • MySQL中的经典面试题——行转列(列转行)
    目录 1、简介:   1. 行转列(Pivot): 2. 列转行(Unpivot): 2、行转列,列转行的思想 3、实现 3.1、实现行转列 3.2、总结(行转列)实现的两种方法   3.3、实现(列转行)  3.4、...
    99+
    2023-10-01
    mysql 数据库 sql
  • mysql行转列和列转行的方法是什么
    在MySQL中,行转列和列转行通常使用以下方法来实现: 使用聚合函数和CASE语句进行行转列操作: SELECT ...
    99+
    2024-04-09
    mysql
  • 行列转换_wmsys.wm_concat
    需求描述loc_sys_busi_strategy是纵表,需转换成横表方便Redis QUEUE处理。 源数据格式 需求格式  注意其中speed,area...
    99+
    2024-04-02
  • MySQL实验--静态行转列->动态行转列->存储过程使用行转列
    概述 今天主要用一个实验来介绍一下在使用行转列的过程及相关实验。下面演示一下。 创建表 这里我用一个比较简单的例子来说明,也是行转列的经典例子,就是学生的成绩三张表:学生表、课程表、成绩表 1、学生表 就简单一点,学生学号...
    99+
    2016-08-19
    MySQL实验--静态行转列->动态行转列->存储过程使用行转列
  • sql多表行转列和级联行转列的方法
    本篇内容主要讲解“sql多表行转列和级联行转列的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sql多表行转列和级联行转列的方法”吧!现有两表A,B A表存...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作