Oracle如何进行行转列和列转行

作者:白雪 | 创建时间: 2023-05-27
在平时做项目的过程中,oracle的行转列和列转行用的的非常多,比如在统计数据的时候,尤其是在画图表的时候,我们都需要不同形式的数据格式和数据结构,以方便前台的展示,对于不同的展示也需要灵活的对数据结构进行处理,那么今天就给大家详细的介绍一...
Oracle如何进行行转列和列转行

操作方法

为了大家清楚,首先我重头开始,来建立库表,并一步一步的进行说明和演示,首先建表如下例子:

说明一下这个表的结构,日期、统计代码、统计名称、数量。看到这里相信大家已经明白这个例子已经非常典型了。首先以行的形式插入数据。因为按这个库表的结构大家应用清楚是行的形式存储了,也就是按日期和统计名称来展示这个名称的数量。插入数据

从上图可以看到,我按日期、统计名称顺序排序,首先展示的是18年的1月13号的各个名称的数量,然后再展示其他日期的各个名称的数量,这是典型的行展示,那么,如果我想把各个名称展示成列的形式展示,也就是说18年1月13号的我只展示一行,每一列展示各个统计名称的数量,那么该如何做呢?相信大家都会想到子查询 如下:

查询结果如下

从上图可以看到现在都变成了列的形式,这就说明以上的子查询转换成了列的形式,这种方式比较麻烦,当然我们还用其他办法,这里不再过多描述。现在只介绍一种,在oracle11版本已经支持了如下 函数的写法,如下:

Ok,写到这里,我们来看一下上图写法的查询结果,如下可以看到和上面的方法的结果是一样的。

下面再来看列转行,下面就上述的列再转回去。那么如何转呢?首先想到的第一种方法就是使用union。查询多个列的union的集合就形成了行。那么再来介绍oracle11是如何处理的

上图中偷个懒,我把画红框的地方作为列的表,也就是上面例子中的查询语句。我将画红框的表的查询结果当做一个表(列的形式),现在转换成行的形式如下:

由此可以看到,和最初建表的结果是一样的。这就是oracle11的简单之处。

点击展开全文

更多推荐