Oracle将一列数据拆分成多行(oracle 一列拆多行)

Oracle将一列数据拆分成多行

在Oracle数据库中,有时候需要将一列数据拆分成多行,这时候可以使用UNPIVOT操作来实现。UNPIVOT一般用于将列转换为行,这对于数据透视分析非常有用。下面我们来详细了解一下Oracle如何将一列数据拆分成多行。

UNPIVOT操作语法如下:

“`sql

UNPIVOT

( FOR IN

( )

)


其中,measure_column表示要转换为行的列;pivot_column表示该列的名称;column_list表示要拆分的列列表。

下面我们来举个例子。假设我们有一个表T,其中包含id、name和score三列数据,现在需要将score列拆分成多行。代码如下:

```sql
CREATE TABLE T (
id INT,
name VARCHAR2(20),
score1 NUMBER,
score2 NUMBER,
score3 NUMBER
);
INSERT INTO T VALUES (1, 'Tom', 80, 90, 95);
INSERT INTO T VALUES (2, 'Jerry', 70, 85, 80);

查询结果如下:

| ID | NAME | SCORE1 | SCORE2 | SCORE3 |

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

| 1 | Tom | 80 | 90 | 95 |

| 2 | Jerry | 70 | 85 | 80 |

现在需要将score列拆分成多行,我们可以使用以下代码实现:

“`sql

SELECT id, name, score, col

FROM T

UNPIVOT (

score FOR col IN (score1, score2, score3)

);


查询结果如下:

| ID | NAME | SCORE | COL |
|----|--------|-------|--------|
| 1 | Tom | 80 | score1 |
| 1 | Tom | 90 | score2 |
| 1 | Tom | 95 | score3 |
| 2 | Jerry | 70 | score1 |
| 2 | Jerry | 85 | score2 |
| 2 | Jerry | 80 | score3 |
可以看到,score列已经被拆分成了多行,每行对应一个score值。其中,col表示原来的列名称。

如果需要将拆分后的数据插入到另一个表中,我们可以使用以下代码实现:

```sql
CREATE TABLE T2 (
id INT,
name VARCHAR2(20),
score NUMBER,
col VARCHAR2(20)
);

INSERT INTO T2
SELECT id, name, score, col
FROM T
UNPIVOT (
score FOR col IN (score1, score2, score3)
);

这样就可以将拆分后的数据插入到T2表中了。

总结

以上就是Oracle如何将一列数据拆分成多行的方法,可以使用UNPIVOT操作来实现。UNPIVOT一般用于将列转换为行,特别适用于数据透视分析。以上代码仅供参考,具体使用时需要根据实际情况进行调整。


数据运维技术 » Oracle将一列数据拆分成多行(oracle 一列拆多行)