oracle中行行数据转换成列列数据(oracle 中行行转列)

Oracle中行行数据转换成列列数据

在Oracle数据库中,数据通常存储在表中,其中每行代表一个记录,每列代表一种属性。但在某些情况下,需要将表中行数据转换为列数据,以便更好地查询、分析和展示数据。本文将介绍如何在Oracle中实现行列转换。

1.使用PIVOT函数

Oracle 11g及以上版本提供了PIVOT和UNPIVOT函数,可以将行数据转换为列数据或列数据转换为行数据。PIVOT函数将行数据转换为列数据,基于一个或多个列生成一个新的行集合,每个新行集合对应一个新的列,原始数据中的值是新行集合的值。

例如,我们有一个名为sales的表,其中包含有关销售记录的数据:

| YEAR | MONTH | PRODUCT | SALES |

|——|——-|———|——-|

| 2019 | Jan | A | 1000 |

| 2019 | Feb | A | 2000 |

| 2019 | Jan | B | 1500 |

| 2019 | Feb | B | 2500 |

我们想要将该表中的数据按产品名称和月份汇总,并将结果按月份作为新的列。可以使用以下语句:

SELECT *

FROM (SELECT PRODUCT, MONTH, SALES FROM sales)

PIVOT (SUM(SALES) FOR MONTH IN (‘Jan’ AS JANUARY, ‘Feb’ AS FEBRUARY));

运行后,将得到以下结果:

| PRODUCT | JANUARY | FEBRUARY |

|———|——–|———-|

| A | 1000 | 2000 |

| B | 1500 | 2500 |

2.使用CASE语句

除了PIVOT函数外,我们还可以使用CASE语句将行数据转换为列数据。与PIVOT函数不同,CASE语句需要手动指定列名和列数据。此外,使用CASE语句还可以进行更复杂的计算和条件过滤。

例如,我们有一个名为sales的表,其中包含有关销售记录的数据:

| YEAR | MONTH | PRODUCT | SALES |

|——|——-|———-|——|

| 2019 | Jan | A | 1000 |

| 2019 | Feb | A | 2000 |

| 2019 | Jan | B | 1500 |

| 2019 | Feb | B | 2500 |

我们想要将该表中的数据按产品名称和月份汇总,并将结果按月份作为新的列。可以使用以下语句:

SELECT PRODUCT,

SUM(CASE WHEN MONTH = ‘Jan’ THEN SALES ELSE 0 END) AS JANUARY,

SUM(CASE WHEN MONTH = ‘Feb’ THEN SALES ELSE 0 END) AS FEBRUARY

FROM sales

GROUP BY PRODUCT;

运行后,将得到以下结果:

| PRODUCT | JANUARY | FEBRUARY |

|———|——–|———-|

| A | 1000 | 2000 |

| B | 1500 | 2500 |

3.使用UNPIVOT函数

除了将行数据转换为列数据外,我们还可以将列数据转换为行数据。Oracle 11g及以上版本提供了UNPIVOT函数,可以将多列转换为一列,并使用新的列存储原始列的列名和列值。

例如,我们有一个名为sales的表,其中包含有关销售记录的数据:

| PRODUCT | JANUARY | FEBRUARY |

|———|——–|———-|

| A | 1000 | 2000 |

| B | 1500 | 2500 |

我们想要将该表中的数据按月份和产品名称展示,并将结果按月份排序。可以使用以下语句:

SELECT * FROM (

SELECT PRODUCT, ‘JANUARY’ AS MONTH, JANUARY AS SALES FROM sales

UNION ALL

SELECT PRODUCT, ‘FEBRUARY’ AS MONTH, FEBRUARY AS SALES FROM sales

)

ORDER BY MONTH, PRODUCT;

运行后,将得到以下结果:

| PRODUCT | MONTH | SALES |

|———|———|——-|

| A | JANUARY | 1000 |

| B | JANUARY | 1500 |

| A | FEBRUARY | 2000 |

| B | FEBRUARY | 2500 |

总结

本文介绍了在Oracle中将行数据转换为列数据的三种方法:使用PIVOT函数、使用CASE语句和使用UNPIVOT函数。根据需要和情况选择适合自己的方法,并灵活应用。


数据运维技术 » oracle中行行数据转换成列列数据(oracle 中行行转列)