oracle行转列(oracle中几种常用的行转列方法)

1 . decode函数行转列,例如:SELECT job, COUNT() AS "1 0", COUNT() AS "2 0", COUNT() AS "3 0", COUNT() AS "4 0" FROM scott.emp GROUP BY job; 2 . PIVOT功能行转列,确保数据库版本1 1 g以上:WITH tmp_tab AS (SELECT FROM tmp_tab) SELECT FROM tmp_tab PIVOT FOR deptno IN ("1 0", "2 0", "3 0", "4 0"); 这就是坑,别只依赖一种方法,评估需求再选择。

一种面板数据行列混转的SQL处理思路

上周听同事讲这个SQL转换。
挺有意思的。

行转列步骤是重点。
2 02 3 年5 月1 0号那天我测试过。
数据源表score有科目、班级、学期、平均分四列。
班级有3 个,学期有3 个。
用CASEWHEN把每个班级每个学期的平均分拉出来,放到新列里。
比如'1 班的第一学期平均分'这个列。
然后用MAX过滤掉没数据的。
这部分我不确定,但逻辑是这样。
最后GROUP BY 科目。

列转行步骤更巧妙。
2 02 3 年5 月1 2 号我试了UNION ALL。
把行转列后的表,每个学期单独SELECT出来。
比如第一学期那个SELECT。
第二学期那个SELECT。
然后用UNION ALL拼起来。
最后ORDER BY 科目 DESC排序。

优化代码那个直接引用列值的方法挺好。
减少重复。
2 02 3 年5 月1 5 号我改过。
看着更清晰。

关键点就这些。
行转列用CASEWHEN和MAX。
列转行用UNION ALL。
灵活调整就行。
你看着办。