Oracle之行转列pivot函数

Oracle之行转列pivot函数文章目录方法一:Oracle行转列pivot函数方法二:使用MAXDECODE实现方法一:Oracle行转列pivot函数语法:pivot(任一聚合函数for需要转列的值所在列名in(需转为列名的值))原数据格式如下: SELECT rspfd.FORECAST_YEAR,年份 rspfd.INDEX_CODE,指标代码 rspfd.INDEX_VALUE指标值 FROMRPT_STK_PROFIT_FORECAST_DATAr

大家好,欢迎来到IT知识分享网。

方法一: 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;

在这里插入图片描述

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/14644.html

(0)
上一篇 2024-02-25 08:26
下一篇 2024-02-25 22:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信