方法一: Oracle行转列pivot函数

语法:pivot(任一聚合函数 for 需要转列的值所在列名 in (需转为列名的值))

原数据格式如下:

	SELECT 
		rspfd.FORECAST_YEAR , --年份
		rspfd.INDEX_CODE ,    --指标代码
		rspfd.INDEX_VALUE     --指标值
	FROM RPT_STK_PROFIT_FORECAST_DATA rspfd  
	WHERE rspfd.FORECAST_ID = 111

在这里插入图片描述
行转列pivot函数

--行转列
select 
	*
from 
  (SELECT 
		rspfd.FORECAST_YEAR , --年份
		rspfd.INDEX_CODE ,    --指标代码
		rspfd.INDEX_VALUE     --指标值
	FROM RPT_STK_PROFIT_FORECAST_DATA rspfd  
	WHERE rspfd.FORECAST_ID = 250717)
  pivot(
    max(INDEX_VALUE) for INDEX_CODE in (      --INDEX_CODE 即要转成列的字段
        '1000001' as INDEX_O1,                --max(INDEX_VALUE) 此处必须为聚合函数,
        '1000003' as INDEX_O2,                --in () 对要转成列的每一个值指定一个列名
        '1000008' as INDEX_O3,
        '1000009' as INDEX_O4
    )
  );          

在这里插入图片描述

方法二:使用MAX DECODE 实现

    SELECT 
 		T.FORECAST_YEAR,
 		max(decode(T.INDEX_CODE,'1000001',T.INDEX_VALUE,'')) AS INDEX_O1,
 		max(decode(T.INDEX_CODE,'1000003',T.INDEX_VALUE,'')) AS INDEX_O2,
 		max(decode(T.INDEX_CODE,'1000008',T.INDEX_VALUE,'')) AS INDEX_O3,
 		max(decode(T.INDEX_CODE,'1000009',T.INDEX_VALUE,'')) AS INDEX_O4
 	FROM (
	SELECT 
		rspfd.FORECAST_YEAR , --年份
		rspfd.INDEX_CODE ,    --指标代码
		rspfd.INDEX_VALUE     --指标值
	FROM RPT_STK_PROFIT_FORECAST_DATA rspfd  
	WHERE rspfd.FORECAST_ID = 111) T GROUP BY T.FORECAST_YEAR;

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐