Oracle实现列向行转换的技巧(oracle把列变成行)

数据库中的行与列的转换是一项基本的技术,在Oracle数据库中可以通过使用PIVOT子句来实现行列转换。此外,可以使用Oracle CASE和GROUP BY子句,结合实现SQL的“行转列”技术。

要基于Case实现行转换,你需要一个外部表,它就是要转换的行,它将作为SQL查询中的case表达式。这是ORACLE中行转列转换的基本结构,可以用来实现行列转换:

SELECT

,

MAX(CASE

WHEN THEN

END) AS

FROM

GROUP BY

下面是一个简单的例子,使用Oracle case结构实现行列转换。当前表中有4列,我们要将第三列列值转换到第二个字段,以行的形式列出。

以下是要实现的例子的表:

COL1 | COL2 | COL3

———————————-

Name1 | Val1 | Res1

Name1 | Val2 | Res2

Name2 | Val1 | Res3

Name2 | Val2 | Res4

下面是使用Case结构实现行列转换的SQL:

SELECT

COL1,

MAX(CASE COL2 WHEN ‘Val1’ THEN COL3 END) AS RES1,

MAX(CASE COL2 WHEN ‘Val2’ THEN COL3 END) AS RES2

FROM tablename

GROUP BY COL1;

执行该SQL语句,将产生行列转换的结果:

COL1 | RES1 | RES2

—————————-

Name1 | Res1 | Res2

Name2 | Res3 | Res4

以上就是使用Oracle CASE实现列向行转换的技巧,非常实用。也可以使用PIVOT子句实现行列转换,但PIVOT子句要求列在固定的位置上,而使用Case可以转换任何位置的列。


数据运维技术 » Oracle实现列向行转换的技巧(oracle把列变成行)