oracle中将两列转换为两行(oracle两列转成两行)

Oracle中将两列转换为两行

在Oracle数据库中,有时候需要将一张表中的两列数据转换成两行数据。这种情况下,可以使用Oracle的PIVOT函数来实现。

例如,有以下一张表Sales记录了每个月的商品销售情况:

| Product | Jan | Feb | Mar | Apr | May | Jun |

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

| A | 100 | 200 | 150 | 120 | 180 | 220 |

| B | 80 | 100 | 120 | 110 | 90 | 150 |

现在需要将月份和销售额分别转换为两行数据,如下所示:

| Product | Month | Sales |

| ——- | —– | —– |

| A | Jan | 100 |

| A | Feb | 200 |

| A | Mar | 150 |

| A | Apr | 120 |

| A | May | 180 |

| A | Jun | 220 |

| B | Jan | 80 |

| B | Feb | 100 |

| B | Mar | 120 |

| B | Apr | 110 |

| B | May | 90 |

| B | Jun | 150 |

可以使用如下SQL语句实现:

SELECT *
FROM Sales
UNPIVOT (
Sales FOR Month IN (Jan, Feb, Mar, Apr, May, Jun)
)
ORDER BY Product, Month;

在上面的SQL语句中,UNPIVOT函数将Jan、Feb、Mar、Apr、May和Jun这六列数据转换成了两列数据:Month和Sales。由于Month和Sales的值是从Jan、Feb、Mar、Apr、May和Jun这六列数据中动态获取的,因此需要在UNPIVOT语句中使用IN关键字指定这六列数据的列名。

除了使用UNPIVOT函数外,还可以使用Oracle的CASE语句和UNION ALL语句将两列数据转换成两行数据。例如,可以使用如下SQL语句实现:

SELECT Product, 'Jan' AS Month, Jan AS Sales
FROM Sales
UNION ALL
SELECT Product, 'Feb' AS Month, Feb AS Sales
FROM Sales
UNION ALL
SELECT Product, 'Mar' AS Month, Mar AS Sales
FROM Sales
UNION ALL
SELECT Product, 'Apr' AS Month, Apr AS Sales
FROM Sales
UNION ALL
SELECT Product, 'May' AS Month, May AS Sales
FROM Sales
UNION ALL
SELECT Product, 'Jun' AS Month, Jun AS Sales
FROM Sales
ORDER BY Product, Month;

在上面的SQL语句中,使用了六个SELECT语句,每个SELECT语句都将Sales表中的一列数据转换成两行数据。其中,使用AS关键字为新的Month和Sales列指定了列名,使用UNION ALL语句将这六个SELECT语句的结果合并成了一张表。

综上所述,Oracle中将两列数据转换成两行数据有多种方法,可以根据具体情况选择不同的方法。如果需要频繁进行这种转换,可以考虑创建视图或者使用存储过程来简化操作。


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