Oracle行转列函数,列转行函数
在Oracle数据库中,行转列通常可以使用CONCAT
函数或者LISTAGG
函数实现,列转行可以使用UNPIVOT
操作。
行转列示例(使用LISTAGG
):
SELECT deptno,
LISTAGG(ename, ',') WITHIN GROUP (ORDER BY ename) AS employees
FROM emp
GROUP BY deptno;
列转行示例(使用UNPIVOT
):
SELECT deptno, empname, empcount
FROM (SELECT deptno,
COUNT(*) AS empcount,
ename AS mgr
FROM emp
GROUP BY deptno, mgr)
UNPIVOT (empname FOR mgr IN (mgr AS 'Manager', ''));
在这个列转行的例子中,我们将mgr
字段的不同值转换成了不同的行,并且为每个mgr
值计数。这里的UNPIVOT
操作将mgr
字段的值转换成了行,并且创建了一个新的字段empname
来存储原始的ename
值。注意,这里我们使用了一个虚拟的mgr
值(空字符串)来确保UNPIVOT
操作可以正常工作。
评论已关闭