实现行转换成列是很实用的功能,在Oracle中可以使用PIVOT关键字实现。下面是具体步骤:
步骤一:创建表和插入数据
首先,我们需要创建一个表并插入一些数据。这些数据的格式应该是需要被转换的,也就是需要转换成列。
我们创建一个表名为sales,包括以下列:product,year和amount。并向其中插入一些数据。
CREATE TABLE sales (
product VARCHAR2(50),
year NUMBER(4),
amount NUMBER(10,2));
INSERT INTO sales VALUES ('Apple', 2019, 1000);
INSERT INTO sales VALUES ('Apple', 2020, 1500);
INSERT INTO sales VALUES ('Apple', 2021, 2000);
INSERT INTO sales VALUES ('Samsung', 2019, 800);
INSERT INTO sales VALUES ('Samsung', 2020, 1200);
INSERT INTO sales VALUES ('Samsung', 2021, 1800);
INSERT INTO sales VALUES ('Nokia', 2019, 600);
INSERT INTO sales VALUES ('Nokia', 2020, 900);
INSERT INTO sales VALUES ('Nokia', 2021, 1300);
步骤二:使用PIVOT关键字
我们使用PIVOT关键字将行转换为列。
SELECT *
FROM (
SELECT product, year, amount
FROM sales)
PIVOT (
SUM(amount)
FOR year IN (2019, 2020, 2021));
结果如下:
+----------+----------+----------+----------+----------+----------+
| PRODUCT | 2019_AMT | 2020_AMT | 2021_AMT |
+----------+----------+----------+----------+----------+----------+
| Apple | 1000 | 1500 | 2000 |
| Nokia | 600 | 900 | 1300 |
| Samsung | 800 | 1200 | 1800 |
+----------+----------+----------+----------+----------+----------+
在上述示例中,我们使用了PIVOT关键字,列出表中product,year和amount的值,并且把year列在PIVOT子句中使用,将行转换为列。
步骤三:添加其他聚合函数和GROUP BY子句
我们还可以在PIVOT子句中添加其他聚合函数,例如AVG,COUNT等。
SELECT *
FROM (
SELECT product, year, amount
FROM sales)
PIVOT (
SUM(amount) AS total_amt,
AVG(amount) AS avg_amt,
COUNT(amount) AS cnt
FOR year IN (2019, 2020, 2021))
ORDER BY product;
结果如下:
+----------+---------+---------+---------+---------+---------+---------+------+---------+------+---------+------+
| PRODUCT | 2019_ | 2020_AVG| 2021_AVG| 2019_CNT| 2020_CNT| 2021_CNT| 2019_| 2020_TO | 2021_TO | 2019_AVG| 2020_TOTAL|
| | TOTAL_AM| | | | | | AVG | TAL_AMT | TAL_AMT | | _AVG |
| | T | | | | | | | | | | |
+----------+---------+---------+---------+---------+---------+---------+------+---------+---------+--------+------+
| Apple | 1000 | 1500 | 2000 | 1 | 1 | 1 | 1000 | 1500 | 2000 | 1000 | 1500 |
| Nokia | 600 | 900 | 1300 | 1 | 1 | 1 | 600 | 900 | 1300 | 600 | 900 |
| Samsung | 800 | 1200 | 1800 | 1 | 1 | 1 | 800 | 1200 | 1800 | 800 | 1200 |
+----------+---------+---------+---------+---------+---------+---------+------+---------+---------+--------+------+
在这个示例中,我们向PIVOT子句中添加了三个聚合函数:SUM,AVG和COUNT。我们使用了别名并将这些列添加到SELECT语句中作为结果。我们还添加了一个GROUP BY子句,用于分组结果。
以上就是Oracle实现行转换成列的完整攻略,示例包括了常用语句的详细说明,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Oracle实现行转换成列的方法 - Python技术站