oracle横表怎么转纵表

什么是横表和纵表

在oracle数据库中,表的结构通常是横向的,即每个列都是不同属性的数据。例如,一个订单表可能包含订单编号、客户名称、订单日期、订单状态等等。这种表称为横表。然而,在某些情况下,我们需要将数据以一种更方便的方式呈现,这时候就需要将横表转换成纵表。纵表将每个属性作为一条记录的一个字段,更适合于展示某个实体的多个属性值,例如商品、学生、考试成绩等等。

如何将横表转换成纵表

将横表转换成纵表需要借助于Oracle提供的PIVOT和UNPIVOT函数。

使用PIVOT函数将横表转换成纵表

使用PIVOT函数可以将横表转换成纵表。下面是一个例子:

CREATE TABLE SALES (

YEAR NUMBER,

QUARTER NUMBER,

PRODUCT VARCHAR2(50),

AMOUNT NUMBER

);

INSERT INTO SALES VALUES (2017, 1, 'Product A', 10000);

INSERT INTO SALES VALUES (2017, 1, 'Product B', 20000);

INSERT INTO SALES VALUES (2017, 2, 'Product A', 30000);

INSERT INTO SALES VALUES (2017, 2, 'Product B', 40000);

INSERT INTO SALES VALUES (2018, 1, 'Product A', 50000);

INSERT INTO SALES VALUES (2018, 1, 'Product B', 60000);

INSERT INTO SALES VALUES (2018, 2, 'Product A', 70000);

INSERT INTO SALES VALUES (2018, 2, 'Product B', 80000);

SELECT *

FROM (

SELECT YEAR, PRODUCT, AMOUNT

FROM SALES

)

PIVOT (

SUM(AMOUNT)

FOR YEAR IN (2017,2018)

);

这里,我们从SALES表中选取了YEAR、PRODUCT和AMOUNT列,然后对YEAR列使用PIVOT函数,将其转换成纵表形式,其中将2017和2018作为列来展示,在每一列中显示每个产品的销售总额。输出结果如下:

PRODUCT 2017 2018

Product A 40000 120000

Product B 60000 140000

这样就将横向的数据转换成了纵向展示。

使用UNPIVOT函数将纵表转换成横表

使用UNPIVOT函数可以将纵表转换成横表。下面是一个例子:

CREATE TABLE STUDENT_GRADES (

NAME VARCHAR2(50),

ENGLISH NUMBER,

MATH NUMBER,

SCIENCE NUMBER

);

INSERT INTO STUDENT_GRADES VALUES ('Tom', 85, 90, 93);

INSERT INTO STUDENT_GRADES VALUES ('Mary', 78, 88, 85);

INSERT INTO STUDENT_GRADES VALUES ('John', 92, 94, 91);

SELECT *

FROM (

SELECT NAME, SUBJECT, SCORE

FROM STUDENT_GRADES

UNPIVOT (

SCORE

FOR SUBJECT IN (ENGLISH, MATH, SCIENCE)

)

);

这里,我们从STUDENT_GRADES表中选取了NAME、ENGLISH、MATH和SCIENCE列,然后对ENGLISH、MATH和SCIENCE列使用UNPIVOT函数,将其转换成横表形式,其中每条记录表示每个学生的每个科目的成绩。输出结果如下:

NAME SUBJECT SCORE

Tom ENGLISH 85

Tom MATH 90

Tom SCIENCE 93

Mary ENGLISH 78

Mary MATH 88

Mary SCIENCE 85

John ENGLISH 92

John MATH 94

John SCIENCE 91

这样就将纵向展示的数据转换成了横向的表格。

总结

在Oracle数据库中,我们可以使用PIVOT和UNPIVOT函数将横表转换成纵表或者将纵表转换成横表。这种转换方式可以使数据呈现更清晰、更方便,从而增强数据分析及展示的可操作性。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签